java Klasse

Guten Tag



ich brauche ein Java Klasse für ein Auto. Da ich noch Java-Anfängerin bin, kann ich folgendes kleines Problem nicht lösen. Ich muss ein Klasse Auto in Java definieren (das kann ich schon, siehe hier),







Code:
public class Auto {
String kennzeichen;
String farbe;

double ps;
public Auto(String myKennzeichen, String myFarbe
, double myPs
) {
this.kennzeichen=myKennzeichen;
this.farbe=myFarbe;
this.ps=myPs;
}
}



aber Kennzeichen muss eindeutig sein, d.h. in einem Auto-Array dürfen keine 2 Autos vorkommen, die desselben Autokennzeichen haben



Ferner können die Autos nur Farben aus {Rot Blau Geld Weiss Schwarz} haben, wobei die Autos auch noch nach Farben sortiert werden können. Für die Farbensortierung gilt Rot<Blau<Geld<Weiss<Schwarz



kann jemand mir zeigen, wie ich mein Code so ergänzen, dass die entsprechenden Anforderungen erfüllt. Dafür wäre ich sehr dankbar



Lg Sandra
 
Hi

solche Sachen gehen über die Klasse selber raus; der restliche Code vom Programm (und der Sinn) wären nötig.

Bei deiner Klasse selber wären Getter/Setter noch nett.
 
Müssen die Farben als String definiert werden? Ansonsten würde ich für die Farben einen Enum erstellen, was nützlich wäre für die Sortierung und für die Farb-Range.

Ansonsten lese ich 3 Anforderungen heraus:
1) Im Array kein Kennzeichen doppelt zulassen
2) Nur bestimmte Farben zulassen
3) Farben sortieren können

zu 1) Entweder du überprüfst beim Einfügen in das Array, ob das Kennzeichen bereits vorhanden ist oder du überschreibst die equals-Methode von Auto, dann kannst du 'bestehende' Funktionen nutzen, welche auf Duplikate prüfen.
zu 2) Wie oben erwähnt würde ich für die Farben ein Enum verwenden, vorausgesetzt du darfst das. Auch wegen 3)
zu 3) Ich gehe hier davon aus, dass die Farben in einem Enum stehen. Hier sei ein Beispiel:

Java:
import java.util.Arrays;

public class Kind implements Comparable<Kind> {
public enum Geschlecht {
MAEDCHEN, JUNGE;

@Override
public String toString() {
switch(this) {
case MAEDCHEN:
return "Mädchen";
case JUNGE:
return "Junge";
Default:
return "";
}
}
}

private Geschlecht geschlecht;
private String name;

public Kind(String name, Geschlecht geschlecht) {
this.name = name;
this.geschlecht = geschlecht;
}

@Override
public int compareTo(Kind kind) {
if(geschlecht.ordinal() < kind.geschlecht.ordinal()) return -1;
else if(geschlecht.ordinal() > kind.geschlecht.ordinal()) return 1;
else return 0;
}

@Override
public String toString() {
return name + ", " + geschlecht;
}

public static void main(String[] args) {
Kind[] kinder = {new Kind("A", Geschlecht.JUNGE), new Kind("B", Geschlecht.MAEDCHEN), new Kind("C", Geschlecht.MAEDCHEN), new Kind("D", Geschlecht.JUNGE)};
System.out.println(Arrays.toString(kinder));

Arrays.sort(kinder);
System.out.println(Arrays.toString(kinder));
}
}

Ausgabe:
[A:Junge, B:Mädchen, C:Mädchen, D:Junge]

[B:Mädchen, C:Mädchen, A:Junge, D:Junge]
 
zu 1) Entweder du überprüfst beim Einfügen in das Array, ob das Kennzeichen bereits vorhanden ist oder du überschreibst die equals-Methode von Auto, dann kannst du 'bestehende' Funktionen nutzen, welche auf Duplikate prüfen.
> bitte konkreter sein
zu 2) Wie oben erwähnt würde ich für die Farben ein Enum verwenden, vorausgesetzt du darfst das. Auch wegen 3)
> habe hin bekommen
 
Nun um "genauer" zu sein, müsste ich wissen wie dein Array befüllt wird. Ist es überhaupt ein Array oder kannst du auch andere Listentypen nehmen wie z.B. ArrayList?
Musst du beim Einfügen in der Liste sicherstellen, dass das Kennzeichen noch nicht vorhanden ist oder musst du aus einer bestehenden Liste Duplikate finden und entfernen?
 
Prima für mich wäre wenn es wie bei UNIQUE von SQL, dass es erst gar nicht dazu kommt, dass ein Array 2 Auto gleicher Kennzeichen nicht aufnimmt
 
mei code ist





Code:
import java.util.*;

public class AutoTest {
static Auto [] arrayAuto = new Auto [] {
new Auto("N-DTJ-123", "ROT", 123), 
new Auto("N-DTJ-123", "BLAU", 123), 
};

public static void main(String[] args) {




for(int i=0; i<arrayAuto.length; i++)
{
System.out.printf(Locale.ENGLISH, "%d --> %s\n", 
i, 
arrayAuto[i].kennzeichen
);

}



}
}
 
@g.sandra.1995 Als kleinen Tipp: Bitte das Einrücken nicht vergessen! Das sollte stark helfen.

Nun zu deinem Anliegen. Du müsstest vorher eine Prüfung starken, ob dieses Kennzeichen bereits vorher vorhanden ist, da mit jedem Auto eine neue Objektinstanz gestartet wird. Anfängertechnisch sollte das die einfachste Lösung sein. Ich möchte dir hiermit eine Starhilfe geben im Bezug auf das Einrücken sowie deinem Anliegen

Java:
    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;
   }

Wenn du dir etwas mehr Arbeit machen möchtest dann bau dir eine Helper Klasse, die alle Auto beinhaltet und dementsprechend throw einen Error/eine Rückmeldung bei einer Erstellung eines bereits vorhanden Kennzeichen.

Mit freundlichen Grüßen
Halfbax
 
Ganz ehrlich, wenn Sandra etwas anderes als Arrays nehmen kann/darf/will dann würde ich keine solche Methode wie "createAuto" selbst implementieren. Als Listen-Typ dann einfach HashSet (dafür equals/hasCode überschreiben)
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E)

Und schon überprüft die add-Methode von selbst, ob das Element bereits vorhanden ist.

In Auto:
Java:
    @Override
    public String toString() {
        return kennzeichen + ":" + farbe;
    }

    @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();
    }

HashSet:
Java:
HashSet<Auto> autos = new HashSet<Auto>();
        autos.add(new Auto("A", Farbe.WEISS));
        autos.add(new Auto("A", Farbe.SCHWARZ));
        autos.add(new Auto("B", Farbe.ROT));
      
        System.out.println(autos);

Ausgabe
Code:
[A:weiß, B:rot]
 
Zuletzt bearbeitet:
Zurück