Liste erstellt und ein Problem mit dem Index

sserio

Bekanntes Mitglied
Sehr geehrte Community,
ich habe mich zum ersten Mal daran gewagt eine eigene Liste zu programmieren. Grundsätzlich verstehe ich die Gedanken dahinter, aber nicht genau wie ich es implementieren soll. In meinem Code habe ich eine insert Methode hinzugefügt und eine find variable beim Index. Gebe ich beim insert 9 ein und suche nach dem index 0 und 1 so gibt er für beide value 9 aus. Bei index 2 findet er dann nichts, weil es null ist (was auch gut ist). Benutze ich die insert methode dann ein zweites Mal, so ist die 9 dann beim idex 0 und die neue Zahl beim index 1. Wieso war die 9 dann davor beim index 0 und 1, die Liste ist dann ja eigentlich nicht brauchbar.

package list;

public class MyList {
ListElement start;

public MyList() {
start = new ListElement(9);
}

public void insertLast(int value) {
ListElement newElement = new ListElement(value);
start.next = newElement;
}

public double get(int index) {
return findIndex(index).getValue();
}


private ListElement findIndex(int index) {
ListElement iterator = start;
for (int i = 0; i < index; i++) {
if (iterator.hasNext()) {
iterator = iterator.next;
} else {
return null;
}
}
return iterator;
}

}

package list;

public class ListElement {
double value;
ListElement next;

public ListElement(double value) {
this.value = value;
next = null;
}

public double getValue() {
return value;
}
public boolean hasNext() {
if (this.next == null) {
return false;
} else {
return true;
}
}
}

package list;

public class Main {
public static void main(String[] args) {
MyList myList = new MyList();
myList.insertLast(9);
System.out.println(myList.get(0));
System.out.println(myList.get(1));
System.out.println("--------------------------------");
myList.insertLast(3);
System.out.println(myList.get(0));
System.out.println(myList.get(1));
}

}
 

mihe7

Top Contributor
Mal in schön:
Java:
package list;

public class MyList {
    ListElement start;

    public MyList() {
        start = new ListElement(9);
    }

    public void insertLast(int value) {
        ListElement newElement = new ListElement(value);
        start.next = newElement;
    }

    public double get(int index) {
        return findIndex(index).getValue();
    }


    private ListElement findIndex(int index) {
        ListElement iterator = start;
        for (int i = 0; i < index; i++) {
            if (iterator.hasNext()) {
                iterator = iterator.next;
            } else {
                return null;
            }
        }
        return iterator;
    }
}

Java:
package list;

public class ListElement {
    double value;
    ListElement next;

    public ListElement(double value) {
        this.value = value;
        next = null;
    }

    public double getValue() {
        return value;
    }

    public boolean hasNext() {
        if (this.next == null) {
            return false;
        } else {
            return true;
        }
    }
}

Java:
package list;

public class Main {
    public static void main(String[] args) {
        MyList myList = new MyList();
        myList.insertLast(9);
        System.out.println(myList.get(0));
        System.out.println(myList.get(1));
        System.out.println("--------------------------------");
        myList.insertLast(3);
        System.out.println(myList.get(0));
        System.out.println(myList.get(1));
    }
}

Deine insertLast-Methode fügt nach dem Start-Element ein. Das liefert beim ersten Mal noch das korrekte Ergebnis, weil zu diesem Zeitpunkt das Start-Element das letzte Element ist. Danach gilt das nicht mehr.

Du willst nicht nach dem Start-Element sondern nach dem letzten Element einfügen.
 

sserio

Bekanntes Mitglied
Mal in schön:
Java:
package list;

public class MyList {
    ListElement start;

    public MyList() {
        start = new ListElement(9);
    }

    public void insertLast(int value) {
        ListElement newElement = new ListElement(value);
        start.next = newElement;
    }

    public double get(int index) {
        return findIndex(index).getValue();
    }


    private ListElement findIndex(int index) {
        ListElement iterator = start;
        for (int i = 0; i < index; i++) {
            if (iterator.hasNext()) {
                iterator = iterator.next;
            } else {
                return null;
            }
        }
        return iterator;
    }
}

Java:
package list;

public class ListElement {
    double value;
    ListElement next;

    public ListElement(double value) {
        this.value = value;
        next = null;
    }

    public double getValue() {
        return value;
    }

    public boolean hasNext() {
        if (this.next == null) {
            return false;
        } else {
            return true;
        }
    }
}

Java:
package list;

public class Main {
    public static void main(String[] args) {
        MyList myList = new MyList();
        myList.insertLast(9);
        System.out.println(myList.get(0));
        System.out.println(myList.get(1));
        System.out.println("--------------------------------");
        myList.insertLast(3);
        System.out.println(myList.get(0));
        System.out.println(myList.get(1));
    }
}

Deine insertLast-Methode fügt nach dem Start-Element ein. Das liefert beim ersten Mal noch das korrekte Ergebnis, weil zu diesem Zeitpunkt das Start-Element das letzte Element ist. Danach gilt das nicht mehr.

Du willst nicht nach dem Start-Element sondern nach dem letzten Element einfügen.
Wie mache ich das? Ich muss dann ja nochmal ein Element erzeugen oder wie
 

mihe7

Top Contributor
Um sich das besser vorstellen zu können, kannst Du ja mal an einen Zug denken.

Aufgabe: hänge einen Waggon ans Ende des Zugs an.

Dein Code schnappt sich nun den ersten Waggon und hängt an diesen den einzufügenden Waggon an.
 

sserio

Bekanntes Mitglied
Aber der erste wagon ist null. Wenn ich dann etwas dranhängen möchte wird null irgendwie zu diesem element und der wagon dahinter auch.

/code public void insertLast(int value) {
if (start==null){
start = new ListElement(value);
} else {
ListElement newElement = new ListElement(value);
start.next = newElement;
}
}
Ich habe mir das irgendwie so gedacht, dass wenn der wagon 0 ist soll er ersetzt werden. Aber wenn der wagon nicht null ist soll er ans ende gehangen werden. Klappt aber nicht
 

sserio

Bekanntes Mitglied
Aber der erste wagon ist null. Wenn ich dann etwas dranhängen möchte wird null irgendwie zu diesem element und der wagon dahinter auch.

/code public void insertLast(int value) {
if (start==null){
start = new ListElement(value);
} else {
ListElement newElement = new ListElement(value);
start.next = newElement;
}
}
Ich habe mir das irgendwie so gedacht, dass wenn der wagon 0 ist soll er ersetzt werden. Aber wenn der wagon nicht null ist soll er ans ende gehangen werden. Klappt aber nicht
Damit Start nicht verändert wird könnte man theoretisch noch eine temporäre einbauen. Klappt dennoch nicht
 

sserio

Bekanntes Mitglied
Um sich das besser vorstellen zu können, kannst Du ja mal an einen Zug denken.

Aufgabe: hänge einen Waggon ans Ende des Zugs an.

Dein Code schnappt sich nun den ersten Waggon und hängt an diesen den einzufügenden Waggon an.
package list;


import java.util.Objects;

public class MyList {
ListElement start;

public MyList() {
start = new ListElement(Math.PI); //start braucht einen Wert
}


public void insertLast(int value) {
if (start.getValue() == Math.PI) { //wenn dieser wert zutrifft, dann soll start erstmal einen wert bekommen bei index0 und mit den nächsten insert methoden wird index 1,2,3, benutzt
start = new ListElement(value);
} else {
ListElement newElement = new ListElement(value);
start.next = newElement;
}
}


public double get(int index) {
return Objects.requireNonNull(findIndex(index)).getValue();
}


private ListElement findIndex(int index) {
ListElement iterator = start;
for (int i = 0; i < index; i++) {
if (iterator.hasNext()) {
iterator = iterator.next;
} else {
return null;
}
}
return iterator;
}

} Ich habe es jetzt so gelöst, es ist aber nicht der Sinn der Sache PI als Wert von start zu benutzen, da es dazu kommen kann, dass jemand PI in die liste einfügt. Hätten Sie eine Lösung wie es funktionieren könnte? Bearbeitung: Es klappt anscheinend auch wenn man PI einträgt, weil dann eine Null-Pointer-Exception geworfen wird. Denke es ist immernoch nicht Sinn und Zweck Bearbeitung2: Es klappt doch, weil ich man in diese Liste kein PI reinsetzen kann, weil es ein Liste ist, dessen elemente doubles aufnehmen. Mit Math.pi muss man pi immer mit (int) casten, weswegen die ganze Zahl von pi nicht eingefügt werden kann und das element start so funktionieren würde.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Aber der erste wagon ist null. Wenn ich dann etwas dranhängen möchte wird null irgendwie zu diesem element und der wagon dahinter auch.

/code public void insertLast(int value) {
if (start==null){
start = new ListElement(value);
} else {
ListElement newElement = new ListElement(value);
start.next = newElement;
}
}
Ich habe mir das irgendwie so gedacht, dass wenn der wagon 0 ist soll er ersetzt werden. Aber wenn der wagon nicht null ist soll er ans ende gehangen werden. Klappt aber nicht
Die Überlegung wegen null ist schon richtig (gut, im konkreten Code wird start im Konstruktor bereits mit einem Element initialisiert, normalerweise wäre start aber null).

Was Du im else-Zweig machen musst, dich bis zum letzten Element zu hangeln:
Java:
ListElement current = start; // wir fangen bei start an
while (current.next != null) { // so lange es ein weiteres Element gibt...
    current = current.next;  // ... schauen wir uns das als nächstes an
}
// an der Stelle ist current.next == null, also das Ende der Liste erreicht
// und da hängen wir jetzt das neue Element ran
current.next = newElement;
Die Zeile
Java:
ListElement newElement = new ListElement(value);
brauchst Du nur einmal vor dem if.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Verkettete Liste Java Basics - Anfänger-Themen 2
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
B Liste sortieren? Java Basics - Anfänger-Themen 4
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
O ADT Liste z. B. Java Basics - Anfänger-Themen 15
B sortierte Liste Java Basics - Anfänger-Themen 4
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
Queiser Liste zurückgeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 7
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben