Informatik: Java List Zähler?

11 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Es müsste eher so aussehen:

int size;
for (size = 0; vokabelliste.hasAccess(); vokabelliste.next()) {
  ++size;
}

return size;

bzw.

int size = 0;
while (vokabelliste.hasAccess()) {
  ++size;
  vokabelliste.next();
}

return size;

Zum Einen wäre die Variable dort, wo sie zurückgegeben werden soll, sonst nicht definiert, zum Anderen muss die Vokabelliste durch die einzelnen Knoten navigieren, weil du sonst eine Endlosschleife erzeugst, da du immer beim ersten Element bleibst. Eine zweite Variable ist übrigens nicht erforderlich, also habe ich sie entfern. Gebe den Bezeichnern immer charakteristische Namen.


mdopik123 
Beitragsersteller
 10.01.2018, 07:45

Danke! Ich schreib dir später ob es funktioniert!

0

Die deklaration von w sollte natürlich ausserhalb der schleife - am besten unmittelbar davor - stattfinden.

w wird übrigens immer 1 sein, weil du b nie änderst.

Warum willst du unbedingt manuell nachzählen?! Ich kann zwar kein java aber bin mir recht sicher das es eine funktion gibt a lá vokabelliste.size() etc um die einträge auszugeben. Wenn es das in c hat wäre es merkwürdig wenn es in java nicht vorhanden wäre.


Kieselsaeure  10.01.2018, 00:04

@tavkomann hmm.. naja okay. ich finde das allerdings nicht so prikelnd manuell nach zu zählen wenn es doch eine fertige methode dafür gibt. die ist hoffentlich effizienter..

0
Etter  10.01.2018, 01:45
@Kieselsaeure

Der Hintergrund dürfte sein, dass man wissen soll wie die Datenstruktur hinter der fertigen Implementierung aussieht/funktioniert, beispielsweise um sowas selbst zu implementieren.

0
tavkomann  09.01.2018, 22:42
Warum willst du unbedingt manuell nachzählen?!

Das ist die Schule ^^. Die bauen gerade selber eine Liste nach. Intern könnte eine Liste nämlich mit mehreren Knoten erzeugt werden, die alle eine Referenz auf den nächsten Knoten besitzen. Zur Bestimmung der Länge muss man entweder mitzählen oder manuell beim Durchnavigieren nachzählen. Die Alternative wäre, Arrays zu verwenden, die man beim Hinzufügen von Elementen kopiert.

1

Also dein Fehler ist zunächst, dass du "w" in der while Schleife initialisierst und daher die Methode w nicht zurückgeben kann, da w ja nach der while-Schleife "gelöscht" wird. Du müsstest das int vor dem w wegmachen und w stattdessen unter int b deklarieren also

...
int b = 0;
int w;

while(...){
  w = b + 1;
  }
  ...

Jetzt verstehe ich aber nicht inwieweit dir das irgendwie die Länge von der Liste ausgibt, da du in der while Schleife nur w als b + 1 deklarierst und sich b ja nicht ändert. Also ist w nur dauerhaft 0 + 1 = 1.

Stattdessen solltest du das w komplett löschen und in der while-Schleife nur

b = b + 1;

setzen.


mdopik123 
Beitragsersteller
 09.01.2018, 22:18

Also, ich habe es jetzt so gemacht wie du es mir geschrieben hast und am Ende noch return b; hinzugefügt. Jetzt erhalte ich zwar keine Fehlermeldung aber die Maschine ist ,,eingefroren", bzw. es tut sich nichts

Danke trotzdem!

0

w ist nur innerhalb der while-Schleife definiert. Wenn der Rest stimmt, müsste es so gehen: (Warum heißt die Methode gibLaengeListe hat sich euer Lehrer den Namen ausgedacht?)

public int gibLaengeListe(){
    vokabelliste.toFirst();
    int laenge = 0;
    while(vokabelliste.hasAccess()){
        laenge++;
    }
    return lange;
}

~Tim

w ist halt nur innerhalb der Klammern aktiv und daher außerhalb unerreichbar. Zudem ist w praktisch immer nur 1, da du es immer wieder neu definierst. Wieso zählst du nicht b hoch und vergisst w? Und wieweit willst du denn da eigentlich zählen? Da ändert sich ja gar nichts.


mdopik123 
Beitragsersteller
 09.01.2018, 22:06

Oh, ja stimmt, danke.

Hast du vielleicht eine Idee wie ich es denn jetzt praktisch richtig umsetzen könnte?

0
Elfblood  09.01.2018, 22:05

Das außerdem. Warum nicht einfach immer +1 in der selben Variable ?

1