Methoden Einfügen von Objekten nach Alphabet in ArrayList funktioniert nicht

john_97

Neues Mitglied
Hey Leute,
ich schreibe grade an einer App für Rezepte (Schulprojekt). Ich will diese in eine ArrayList einfügen und zwar nach dem Alphabet (anhand des Namens). Das einfügen an sich klappt aber wenn ich mir die Elemente aus der Liste wieder anzeigen lassen will kommt es zu Fehlern, bei denen sich auch irgendwie kein Muster erkennen lässt. Enthält der Code einen Fehler?
Java:
public void einfügen(Rezept pNeu){		
  String name = pNeu.getName();
  int i=0;
  boolean eingefügt=false;
  if (liste.isEmpty()){
    liste.add(pNeu);
  }
  else {
    while(i<liste.size()&& eingefügt==false){
      Rezept rZwErg = (Rezept)liste.get(i);
      String strZwErg = rZwErg.getName();
      if (name.compareTo(strZwErg)<0){
	liste.add(i, pNeu);
	eingefügt=true;
      }					
      else {
	i=i+1;
      }
    }
  }
  if (eingefügt==false){
    liste.add(pNeu);
    eingefügt=true;
  }
}

Ich hoffe ihr könnt mir helfen!
 
Zuletzt bearbeitet:
Eine einfache Möglichkeit wäre, die Klasse "Rezept" das Interface "Comparable" implementieren zu lassen.
Dann kannst du die compareTo-Methode einfach überschreiben mit:
Java:
@Override
	public int compareTo(Rezept arg0) {
		return name.compareTo(arg0.name);
	}

Wenn du das hast, dann kannst du deine Liste automatisch sortieren lassen mit:
Java:
Collections.sort(deineListe)

Kleines Beispiel:

Java:
public class Rezept implements Comparable<Rezept> {
	static ArrayList<Rezept> liste = new ArrayList<Rezept>();
	String name;

	public Rezept(String name) {
		this.name = name;
	}

	public static void main(String[] args) {

		liste.add(new Rezept("AA"));
		liste.add(new Rezept("FF"));
		liste.add(new Rezept("DD"));
		liste.add(new Rezept("JJ"));
		liste.add(new Rezept("LL"));
		liste.add(new Rezept("KK"));

		System.out.println("Unsortiert:");
		printList();
		Collections.sort(liste);
		System.out.println("Sortiert:");
		printList();
	}

	public static void printList(){
		
		for(int i=0; i<Rezept.liste.size(); i++){
			System.out.println(Rezept.liste.get(i).name);
		}
	}

	@Override
	public int compareTo(Rezept arg0) {
		return name.compareTo(arg0.name);
	}
}

Ok wenn ich deinen Text nochmal lese stellt sich die Frage ob du es zwingend direkt an der richtigen Position einfügen willst.
Mit meinem Code könntest du theoretisch ein Element am Anfang bzw Ende einfügen und dann sortieren lassen.
Direkt an der richtigen Stelle anfügen geht mit der Methode nicht 😉
 
Zuletzt bearbeitet:
Danke für die Antwort. Ich habe meine Fehler für den Code grade selber gefunden. Die letzte if-Abfrage muss nur in das zweite else mit rein und nicht außerhalb. Dann funktioniert alles 🙂
 

Neue Themen


Zurück
Oben