Hi!
Du hast mehrere Konstruktionen wie
public static void add(){
...
menue();
}
In dem Moment, in dem hier menue()
aufgerufen wird, bleibt die Funktion add()
stehen, und wartet darauf, dass menue()
fertig wird. Allerdings ruft menue()
dann z.B. auch add()
erneut auf, und wartet drauf, dass dieses fertig wird.
Grundsätzlich kann eine Funktion auch z.B. sich selbst aufrufen, oder eine andere bereits laufende Funktion. Dabei wird dann sozusagen eine neue Kopie der Funktion aufgerufen. Das nennt sich „rekursiver Aufruf“. Aber da du so eine wartende Funktion nach der anderen erzeugst, füllst du dir den Speicher - und manche Programmiersprache hat auch ein Limit für die Anzahl der rekursiven Aufrufe.
In deiner menue()
-Funktion sollte eine while-Schleife laufen, die je nach Benutzereingabe die ein oder andere Funktion aufruft. Diese wiederum sollte nach Abschluss ihrer Tätigkeit nicht wieder menue()
aufrufen, sondern nichts tun - das Programm kehrt dann automatisch zum wartenden menue()
zurück.
Zu deiner eigentlichen Frage:
Man kann das ganze in z.B. zwei Klassen aufteilen: Eine für den ganzen Kommandozeilenkram, und eine, die die Daten verwaltet. Denn nächste Woche willst du kein Kommandozeilenprogramm mehr, sondern ein Programm mit ner schönen GUI, oder eins, das über das Netzwerk gesteuert wird. Dann brauchst du jeweils neue Klassen genau dafür, aber nicht für das eigentliche Verwalten deiner Liste.
Deine Liste andererseits… könnte nun ja auch Methoden zum Speichern und Laden gebrauchen, ggf. willst du auch prüfen, ob ein Eintrag schon vorhanden ist, und so weiter. Wie das im Detail geht, damit sollte die Kommandozeilen-/GUI-/Netzwerkklasse nichts zu tun haben, sie sollte nur die Methoden aufrufen.