Text wird in der Console nicht ausgegeben.

Marcel98

Mitglied
Hallo,
Ich möchte gewisse Strings aus einer ArrayList ausgeben lassen, leider wird aber nichts ausgegeben. In der userList ist 1 User drinnen und die Eigenschaft LoggedIn is auf true. In der flightListUser ist auch 1 Objekt gespeichert mit den String-Eigenschaften AirportTakeOff und AirportArrivals.
Ich vermute einen Fehler in einer der beiden for-Schleifen.





[CODE lang="java" title="Methode"]public static void ShowBookingList() {


System.out.println("-¦--------------------¦-");
System.out.println(" ¦ Ihre Buchungsliste ¦");
System.out.println("-¦--------------------¦-");
for(int i = 0; i < AccountManager.userList.size(); i++) {
if(AccountManager.userList.get(i).getLoggedIn() == true) {
for(int y = 0; y < AccountManager.userList.get(i).getFlighListUser().size(); i++)
System.out.println(AccountManager.userList.get(i).getFlighListUser().get(y).getAirportTakeOff() +
" --- " + AccountManager.userList.get(i).getFlighListUser().get(y).getAirportArrivals());
System.out.println();
}[/CODE]
 
for(int y = 0; y < AccountManager.userList.get(i).getFlighListUser().size(); i++)

Du zählst nicht y hoch sondern i - was dann vermutlich zu einer Endlosschleife führt bzw. zu einer IndexOutOfBoundsException.

Aber das ist geraten, da Du eigentlich nichts groß diesbezüglich sagst - was genau ist der Fehler?

Generelle Hinweise:
a) Vernünftige Bezeichner - i / y und so sind keine vernünftigen Bezeichner und man kann icht auf den ersten Blick erkennen, ob an einer Stelle ein i++ richtig oder falsch ist!
b) Unterteile den Code - wenn Du Code unterteilst, dann ist es deutlich einfacher zu lesen und Du kannst deutlich einfacher Fehler suchen bzw. auch Unit Tests schreiben um Code zu testen.

So kann in der ersten Schleife einfach dein User oder was da userList auch immer enthält, ausgeben. Also sowas wie:
Java:
for (User user : AccountManager.userList) {
    user.print();
}

In der print() Methode von User hast Du dann einfach etwas ähnliches. Damit ersparst Du Dir dann unleserliche Ketten wie
AccountManager.userList.get(i).getFlighListUser().get(y).getAirportArrivals()

Was muss der AccountManager diese Detauls eines FlightListUser Eintrages kennen? Der kennt eine Liste an Usern und die gibt er aus. Alle weiteren Details müssten ihm schlicht egal sein!
 
for(int y = 0; y < AccountManager.userList.get(i).getFlighListUser().size(); i++)

Du zählst nicht y hoch sondern i - was dann vermutlich zu einer Endlosschleife führt bzw. zu einer IndexOutOfBoundsException.

Aber das ist geraten, da Du eigentlich nichts groß diesbezüglich sagst - was genau ist der Fehler?

Generelle Hinweise:
a) Vernünftige Bezeichner - i / y und so sind keine vernünftigen Bezeichner und man kann icht auf den ersten Blick erkennen, ob an einer Stelle ein i++ richtig oder falsch ist!
b) Unterteile den Code - wenn Du Code unterteilst, dann ist es deutlich einfacher zu lesen und Du kannst deutlich einfacher Fehler suchen bzw. auch Unit Tests schreiben um Code zu testen.

So kann in der ersten Schleife einfach dein User oder was da userList auch immer enthält, ausgeben. Also sowas wie:
Java:
for (User user : AccountManager.userList) {
    user.print();
}

In der print() Methode von User hast Du dann einfach etwas ähnliches. Damit ersparst Du Dir dann unleserliche Ketten wie
AccountManager.userList.get(i).getFlighListUser().get(y).getAirportArrivals()

Was muss der AccountManager diese Detauls eines FlightListUser Eintrages kennen? Der kennt eine Liste an Usern und die gibt er aus. Alle weiteren Details müssten ihm schlicht egal sein!
In der ersten for-schleife wird die userList durchgemacht (in der Liste sind die User als Objekte gespeichert), soblad er den richtigen user in der userList gefunden hat öffnet sich eine eine 2 for schleife wo die flightListUser durchsucht wird (jeder User hat eine ArrayListe(flightListUser) in sich gespeichert). In der flightListUser werden wieder Objekte gespeichert und die besitzen die Eigenschaften (String) AirportTakeOff und AirportArrivals. In dieser ArrayList ist min. 1 Objekt gespeichert. Mein Ziel ist es diese 2 Eigenschaften von jedem Objekt auszugeben. Aber er gibt nichts aus. Es kommt auch keine Fehlermeldung. Sprich er gibt die ersten System.out aus und danach springt er aus der Methode wieder raus.
 
entweder endlos loop

oder
Java:
AccountManager.userList.get(i).getLoggedIn() == true)
gibt jedesmal false

oder
und nebenbei dein y ist immer 0 und dein i springt so 0 2 4 6...
 
hört sich nach "leicht" brechbaren code... vllt paar objekte bauen die das einfacher machen

zusätzlich deine listen nicht static machen, ist schwerer aber da lersnt du oop
irgendwann wirst du schon herausfinden wann man static braucht und das ist kein fall für static..

aus dem einfachen grund: was ist wenn du 2 flight manager haben möchtest... und puff .. ganze programm für den arsch

weil static zu klassen gehören udn eine klasse hast du nur 1mal
 

Zurück
Oben