Abstrakte Datentypen - Liste

Infoxi_2-2

Mitglied
Ich soll die Klasse VerweisListe erweitern zu einer Klasse AnzahlListe. public int anzahl() soll die Elemente der AnzahlListe zurückliefern.

Dafür habe ich folgende Lösung:
Java:
public class AnzahlListe extends VerweisListe{
  public int anzahl(){
    int zumEnde=0;
    int gesamt=0;

    while(!endpos){
      advance();
      zumEnde++;
    }
  
    reset();

    while(!endpos()){
      advance();
      gesamt++;
    }

    reset();

    for(int i=0; i<gesamt-zumEnde; i++)
      advance();

    return gesamt;
  }
}

Kann mit jemand erklären, wieso ich in der ersten While-Schleife keine Klammern hinter dem endpos habe und in der zweiten While-Schleife schon? Oder ist das ein Fehler in der Lösung? Mir ist nämlich leider auch nicht klar, wieso ich zweimal durch die komplette Liste durchgehen muss und nicht zumEnde und gesamt in der ersten Schleife zählen kann. Meines Erachtens liegt der einzige Unterschied in der Klammer hinter dem endpos.
Es wäre super, wenn mir jemand weiterhelfen kann!

LG :)
 

VfL_Freak

Top Contributor
Moin,

und was genau ist "endpos" ??
Verrätst Du auch ??

Wenn 'nur' eine bool'sche Variable ist, sind die Klammern falsch, ist es jedoch eine Methode, dann müssen sie dort hin .....

Warum Du zweimal durch musst?
Hängt IMHO stark von den Aktionen in "reset()" ab .....

Gruß Klaus
 
K

kneitzel

Gast
Ohne genaue Erläuterung zu den Funktionen, ist dies alles schwer zu sagen. Wenn ich vermuten dürfte:
Bezüglich endpos hat Vfl_Freak schon etwas geschrieben. Also entweder ist es eine Funktion, dann müssen Klammern hin oder es ist eine Variable, dann dürfen keine hin.

Und mir scheint, dass die Liste einen Zeiger für einen aktuellen Listenknoten hat. Dieser wird mit jedem advance() weiter gestellt. Jetzt soll es so sein, dass die Liste aber nach Abfragen der Anzahl unverändert sein soll. Daher wird jetzt der folgende Trick verwendet:
- Es wird erst gemessen, wie viele Schritte es noch bis zum Ende sind. (Erste Schleife)
- Dann wird ein reset gemacht.
- Nun werden alle Elemente gezählt.
- Nun wird wieder ein Reset gemacht
- Nun können wir gezielt zum alten Knoten gehen, denn wir wissen ja die Anzahl der Knoten und auch die Anzahl der Knoten vom ehemals aktuellen Knoten bis zum Ende.

Ist aber eine blöde Implementation. Da es ja eine interne Implementation in der Liste ist und keine "externe", kann hier auch anders vorgegangen werden:
- Anzahl einfach merken und beim Add / Delete verändern.
- Den Current Knoten merken, dann durchzählen und dann den Current Knoten erneut setzen.

Konrad
 

Infoxi_2-2

Mitglied
endpos ist ein boolean, der true liefert, wenn die Liste abgearbeitet ist.
advance macht den Nachfolger des aktuellen Elements zum aktuellen Element.
reset macht das erste Listenelement zum aktuellen Element.

Wenn das also ein Fehler in der Lösung ist, dann ist mir nicht klar, warum ich "zumEnde" zählen muss und "gesamt", da eins von beiden ja reichen würde, um die Anzahl der Listenelemente zu bekommen, oder? :confused:

LG
 

Infoxi_2-2

Mitglied
@kneitzel: deine zweite Idee darf leider nicht verwendet werden.
aber weiso schreibe ich denn zwei mal das Gleiche und einmal wird gemessen, wie viele Schritte es noch bis zum Ende sind und einmal werden die Elemente gezählt? (Wenn ich das richtig verstanden habe, müsste ja schließlich hinter beiden endpos die () sein?)
 
K

kneitzel

Gast
Also wenn es eine Funktion ist, dann müssten hinter beiden endpos die Klammern stehen.

Und zum Verständnis: Du hast auf dem Tisch ein paar Objekte in einer Reihe liegen. Und Du hast einen kleinen Marker, der auf ein Objekt Zeigt.
- Du kannst den Marker auf das erste Objekt setzen.
- Du kannst prüfen, ob Du am Ende bist
- Du kannst den Marker ein Objekt weiter verschieben.

Nun willst Du wissen, wie viele Objekte Du hast.
Dazu kannst Du den Marker auf den Anfang setzen und dann immer ein Element weiter gehen bis Du am Ende bist. So kannst Du alle Objekte zählen. Soweit ist noch alles klar? Und Dir ist klar, wo der Marker nach diesem Zählen steht?

Nun willst Du aber, dass der Marker nach dem Zählen wieder genau auf das gleiche Objekt zeigt, wie vor dem Zählen. Also kannst Du - so wie in dem Code und von mir bereits beschrieben:
- Die Anzahl der Objekte bis zum Ende zählen.
- Dann die Anzahl der Objekte insgesamt zählen.
- Und dann über die beiden ermittelten Werte kannst Du genau sagen, beim wievielten Objekt der Marker war und somit diesen wieder an diese Position bringen.

Ich hoffe, dass meine bildliche Darstellung etwas geholfen hat.

Konrad
 

Infoxi_2-2

Mitglied
Ja, hat sie! Vielen Dank! :)
Das heißt also, dass meine erste While-Schleife erstmal nur guckt, an welcher Position das Ende ist.
Die zweite While-Schleife zählt dann die Elemente vom Start bis zu diesem Element.
 
K

kneitzel

Gast
Nicht ganz. Du hast ja drei Schleifen und Du hast da etwas unterschlagen:
1. Schleife (while): Hier werden die Elemente bis zum letzten Element gezählt.
2. Schleife (while): zählt alle Element (Was ja die eigentliche Aufgabe ist)
3. Schleife (for): geht bis zu dem Element, bei dem wir vor der 1. Schleife waren.
 
K

kneitzel

Gast
Wenn es Bestandteil der Aufgabe ist, dass das aktuelle Element nicht geändert wird, dann nicht.

Machen wir einen neuen Vergleich: Wenn Du bei einem Auto getColor() aufrufst, dann hat sich am Status des Autos nichts zu ändern. Es wäre schon sehr blöd, wenn bei der Abfrage der Farbe auch die Handbremse angezogen würde, nur weil der Entwickler meinte, das wäre aus irgend einem Grund einfacher.

Ebenso ist es hier - wenn ich mit einer Liste umgehe und dann zwischendrin einmal die Größe Abfrage: Da ist nicht wirklich erkenntlich und logisch, dass dann das aktuelle Element plötzlich das letzte Element ist.

Ansonsten wäre auch eine andere Lösung denkbar:
Code:
  clear(); // Halt alle Elemente löschen.
  return 0; // Die Größe ist nun 0.
Veränderung ist Veränderung und die darf nicht sein. Also weder das aktuelle Element verändern noch alle Elemente löschen :)

Konrad
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Abstrakte Datentypen synchronisieren Allgemeine Java-Themen 11
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
L interface abstrakte klasse Allgemeine Java-Themen 21
I Interfaces und abstrakte Methoden Allgemeine Java-Themen 5
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
S Statische Methoden in abstrakte Klassen deklarieren? Allgemeine Java-Themen 17
G Abstrakte Fabrik für unterschiedliche Signaturen? Allgemeine Java-Themen 7
L Abstrakte Klasse: Member zwingend überschreibbar machen Allgemeine Java-Themen 2
MQue abstrakte Klasse Allgemeine Java-Themen 3
Q Schnittstelle/Abstrakte Klasse schreibt Annotation vor? Allgemeine Java-Themen 4
G Unterschied abstrakte Klasse und Interface? Allgemeine Java-Themen 3
S abstrakte klassen und packete Allgemeine Java-Themen 3
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
M Technische Realisierung von Atomic Datentypen Allgemeine Java-Themen 16
D JNA Speicherbelegung der Datentypen Allgemeine Java-Themen 13
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
W Primitive Datentypen - Klassenpfad auflösen? Allgemeine Java-Themen 6
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Datentypen Kopieren von Datentypen Allgemeine Java-Themen 10
Asphorm Datentypen Datentypen werden nicht ordnungsgemäß umgewandelt Allgemeine Java-Themen 1
J Datentypen in Java Tabelle Allgemeine Java-Themen 2
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M Java-Threads und Datentypen-Zugriffe Allgemeine Java-Themen 7
O primitive Datentypen threadsicher? Allgemeine Java-Themen 13
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
X Duplikate aus eigenen Datentypen entfernen Allgemeine Java-Themen 14
I Probleme mit Datentypen Allgemeine Java-Themen 4
D Addition generischer Datentypen Allgemeine Java-Themen 12
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
M Generische Datentypen Allgemeine Java-Themen 14
C Primitive Datentypen in Threads Allgemeine Java-Themen 4
E Quelltext nach Datentypen durchsuchen Allgemeine Java-Themen 10
the[V]oid Primitive Datentypen Wrappen und als primitiv markieren? Allgemeine Java-Themen 7
B Eigene Datentypen Allgemeine Java-Themen 5
H Linksschieben << bei long-Datentypen Allgemeine Java-Themen 2
R Problem mit Datentypen Allgemeine Java-Themen 7
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben