Java Editor ArrayList sortieren

kpvonnichts

Mitglied
Hallöle,

wir schreiben im Unterricht momentan ein kleines Programm, so etwas wie ein Notizbuch (mit GUI). Bisher kann mein "Notizbuch" Notizen hinzufügen, löschen und anzeigen sowie aus allen Notizen diejenige, die alphabetisch am niedrigsten ist, heraussuchen. Nun sollen wir eine Methode schreiben, die alle Notizen alphabetisch sortiert.
Dazu war mein Grundgedanke folgender: Ich erstelle eine zweite ArrayList, in die ich die Notizen (sortiert) packe und aus der sie dann wieder in die erste kommen. Hier erstmal der Code der Methode:
Java:
public void sortieren(){
   ArrayList<String> geordneteNotizen;
  int index = 0;
   while(index<anzahlNotizen()){
     index = kleinstenRaussuchen();
     geordneteNotizen.add(notizen.get(index));    }
 }

Java Editor sagt mir in Zeile 6: "Variable might not have been initialized".
Generell habe ich irgendwie das Gefühl, dass der komplette Code für die Mülltonne ist. Habe ihn auch unter Kopfschmerzeinfluss geschrieben :D. Kann man das irgendwie besser lösen?
 

ARadauer

Top Contributor
Collections.sort

darfst du das verwenden oder willst du selber sortieren?


Das sollte deinen Fehler beseitigen:
ArrayList<String> geordneteNotizen = new ArrayList<String>();
 

kpvonnichts

Mitglied
Ahja sowas hatte ich mir schon gedacht, vielen Dank für die schnellen Antworten :)

Ich glaube, ich muss selber sortieren.

Habe jetzt (hoffentlich) das letzte Problem:
Java:
 public void sortieren(){
   ArrayList<String> geordneteNotizen = new ArrayList();
  int index = 0;
   while(index<anzahlNotizen()){
     index = kleinstenRaussuchen();
     geordneteNotizen.add(notizen.get(index));
    }
     int index2 = 0;
     while(index2<anzahlNotizen()){
     notizen.add(geordneteNotizen.get(index2));
     index2 = index2 + 1;
      

    }
 }

Das ist jetzt meine Methode, nur scheint die nicht zu funktionieren. Die "Notizen" lassen sich einfach nicht sortieren. Ich bekomme jede Menge Fehler, weiß aber nicht, wo die herkommen.
 
Zuletzt bearbeitet:
J

JohannisderKaeufer

Gast
Die Fehlermeldung "kann" daher rühren, das du in einer Endlosschleife immer das kleinste Objekt in deine Arrayliste geordneteNotizen füllst bis der Speicher zur Neige geht.

Nach Zeile 6 mußt du auch das kleinste Objekt aus deinen Notizen entfernen.
Java:
notizen.remove(index);
Ansonsten liefert dir kleinstenRaussuchen() immer die gleiche Notiz

Zeile 8-14 kann man z.B auch so schreiben
Java:
notizen.addAll(geordneteNotizen);
 

kpvonnichts

Mitglied
Hallo und danke nochmal, die Fehler erscheinen nicht mehr. Nur funktioniert die "sortieren"- Methode immer noch nicht:
Java:
 public void sortieren(){
   ArrayList<String> geordneteNotizen = new ArrayList();
  int index = 0;
   while(index<anzahlNotizen()){
     index = kleinstenRaussuchen();
     geordneteNotizen.add(notizen.get(index));
     notizen.remove(index);
    }
     notizen.addAll(geordneteNotizen);
      

    }

Die Methode kleinstenRaussuchen() funktioniert (returnet immer den alphabetisch kleinsten Eintrag). Nur wenn ich in der GUI einen Knopp erstelle und den als Auslöser für die Methode "sortieren()" nehme (also book.sortieren() reinschreibe), tut sich nichts. Hat jemand eine Idee, woran das liegen könnte?
 

ARadauer

Top Contributor
Hat jemand eine Idee, woran das liegen könnte?
ja klar an deinem code
zb wie du die methode aufrufst oder kleinstenRaussuchen, kann sein das die sache ewig läuft...
W
arum schreibst du dir nicht ein paar System.out.println Meldungen in deinen code das du siehst was passiert?
 

kpvonnichts

Mitglied
kleinstenRaussuchen() funktioniert einwandfrei und läuft nicht ewig, das habe ich ausprobiert. Die Methode aufrufen tue ich, wie gesagt, per Knopp (jButton). Was soll denn in den out.pintlns drinstehen und wo sollen die hin? Ich verstehe nicht ganz, was ich damit erreichen soll.

Edit: Alles klar, habe grade ein paar System.out.printlns in Schleifen usw. reingeschrieben. Dann habe ich das Programm ausprobiert und es hat tatsächlich alles geklappt. kleinstenRaussuchen() wurde der Anzahl der Notizen entsprechend oft aufgerufen und alles wurde sortiert. Dann habe ich das GUI-Fenster geschlossen und wieder aufgerufen (ich habe absolut nichts am Code verändert), plötzlich hat das nicht mehr geklappt. kleinstenRaussuchen() wurde nur ein mal aufgerufen.
 
Zuletzt bearbeitet:

Raum114

Mitglied
Java:
while(index<anzahlNotizen()){
     index = kleinstenRaussuchen();
    }
Wenn du 10 Notizen hast und da kommt bei kleinstenRaussuchen() ne 10 zurück im ersten Durchlauf was passiert dann?
 

ARadauer

Top Contributor
Stimmt... ich denke auch das man das anders schreiben sollte.... was willst du machen? Solange die Anzahl größer 0 ist...
while(anzahlNotizen()>0){
fände ich besser
 

Neue Themen


Oben