java Klasse

HonniCilest

Erfahrenes Mitglied
Moin,

schon, nur dass Du es dann auch nicht benutzt hast :D

Gruß Klaus

Doch klar habe ich sie benutzt. Natürlich habe ich sie nicht implizit aufgerufen, aber "autos" war in diesem Fall eine HashSet und die Ausgabe hier erfolgt wie in meiner aufgezeigten Ausgabe. HashSet.toString() ist bereits sinnvoll implemtiert, jedoch nicht von einem Array. Bei Arrays ist Arrays.toString(array) notwendig.
 
Guten Tag



Vielen für Ihre Hilfe.



Ich fasse nun zusammen



die enum Klasse ist



Code:
enum Farbe {



ROT,

BLAU,

GELB,

WEISS,

GRAU,

SCHWARZ;



}



die Auto Klasse ist



Code:
import java.util.*;



public class Auto implements Comparable<Auto> {

String kennzeichen;

Farbe farbe;

double ps;



public Auto(String myKennzeichen, Farbe myFarbe, double myPs) {

this.kennzeichen = myKennzeichen;

this.farbe = myFarbe;

this.ps = myPs;

}



public String getKennzeichen() {

return kennzeichen;

}



public Farbe getFarbe() {

return farbe;

}



public double getPs() {

return ps;

}



private static boolean createAuto(ArrayList<Auto> autoCollection, Auto neuesAuto) {

boolean isCreateable = true;

for (Auto auto : autoCollection)

if (auto.getKennzeichen() == neuesAuto.getKennzeichen()) {

isCreateable = false;

break;

}

return isCreateable;

}



@Override

public String toString() {

String erg="";

erg = erg + String.format(Locale.ENGLISH, "%s Farbe=%s mit %1.3f PS\n",

kennzeichen, farbe, ps);

erg = erg + String.format(Locale.ENGLISH, "\n");

return erg;

}



@Override

public boolean equals(Object o) {

if (!(o instanceof Auto))

return false;

Auto auto = (Auto) o;

return kennzeichen.equals(auto.kennzeichen);

}



@Override

public int hashCode() {

return kennzeichen.hashCode();

}



@Override

public int compareTo(Auto ot) {

if (farbe.ordinal() < ot.farbe.ordinal())

return -1;

else if (farbe.ordinal() > ot.farbe.ordinal())

return 1;

else

return 0;

}

}



… alles testen



Code:
import java.util.*;



public class AutoTest {



public static void main(String[] args) {

HashSet<Auto> autos = new HashSet<Auto>();

autos.add(new Auto("A", Farbe.WEISS, 28));

autos.add(new Auto("A", Farbe.SCHWARZ, 37));

autos.add(new Auto("B", Farbe.ROT, 59));

autos.add(new Auto("C", Farbe.BLAU, 28));

autos.add(new Auto("D", Farbe.GRAU, 37));

autos.add(new Auto("E", Farbe.GRAU, 59));

System.out.println(autos);

System.out.println("+++++sortiert+++++");

List sortedList = new ArrayList(autos);

Collections.sort(sortedList);

System.out.println(sortedList);

}

}



bei Compilieren bekomme ich die Meldung




Note: AutoTest.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.



hat jemand Verbesserungen?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

1) Die Warning kommt bei deinem Test, Zeile 29. Hier fehlen die Generics auf der Liste:
Java:
List sortedList = new ArrayList(autos);
2) Deine Auto.toString() ruft die format() 2x auf, dies kann man auf einen Aufruf zusammenfassen
3) Die Auto.hashCode() und equals() sind nicht null-safe (Exception wenn kennzeichen = null)
4) Attribute sind normalerweise private. Da du keine Setter hast, kannst du diese bei dir auch final machen.
5) Die Auto.createAuto() kann man als Einzeiler schreiben:
Java:
return autoCollection.stream().noneMatch(neuesAuto::equals);
6) Deine Auto.compareTo() kann man auch als Einzeiler schreiben:
Java:
return farbe.ordinal() - ot.farbe.ordinal();

Grüsse,
BK
 

Neue Beiträge