Feld von verketteten Listen

Estor

Mitglied
Hallo, ich bin ein ziemlicher Anfänger was Java betrifft und daher ist die Lösung meines Problems hoffentlich nicht allzu schwer, vermutlich stehe ich nur irgendwo auf dem Schlauch.
Ich will ein Feld anlegen in welchem verkettete Listen abgespeichert sind (ohne die Bibliothek für Listen zu benutzen).
Mein Code sieht ungefähr so aus:
Java:
public class FeldVonVerkettetenListen {
       
    Listenelement[] liste;
    int feldanzahl;

    public FeldVonVerkettetenListen(int feldanzahl) {
        this.feldanzahl = feldanzahl;
        liste = new Listenelement[feldanzahl];
        for (int i=0; i < feldanzahl; i++) {
            liste[i] = new Listenelement(0);  //Liegt hier der Fehler?
        }
    }

    class Listenelement {
        
        int wert;
        Listenelement next;
        
        public int getWert() {
            return wert;
        }

        public Listenelement(int wert) {
            this.wert = wert;
        }

        public Listenelement getNext() {
            return next;
        }

        public void setNext(Listenelement next) {
            this.next = next;
        }
        
    }

}
<liste.length; i++)="" {
<liste.length; i++)="" {
<liste.length; i++)="" {
<liste.length;i++) {
<liste.length;i++) {<liste.length;="" i++)="" {

Die Klasse Übergabe wird aufgerufen, das Feld vom Typ Listenelemente mit "felderanzahl" Feldern angelegt und dann dachte ich, dass ich die jeweiligen Felder mit "new Listenelement(0)" belegen kann, so dass als Wert die 0 abgespeichert ist und ich auch darauf zugreifen kann. Versuche ich allerdings den Wert eines Feldes abzurufen (mit "liste[feldanzahl-1].getWert()" kommt eine Nullpointerexeption.
Muss ich erst noch eine seperate Klasse für die verkettete Liste erstellen?
Läuft irgendetwas mit den Methoden schief?
Wie gesagt, ich habe nicht besonders viel Erfahrung und würde mich über Tipps freuen :)</liste.length;i++)></liste.length;i++)></liste.length;></liste.length;></liste.length;>
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
Es wäre mal gut zu wissen,wie der Code genau aussieht.

Weil der Code den du gepostet hast, macht wenig Sinn.
Erstmal hab ich so eine for-Schleife noch nie gesehen:
Java:
  for (int i=0; i<liste.length; i++)=""
Wofür das ="". Sollte ein Syntax Error sein.

Und zweitens gibts den Konstruktor "Übergabe", ohne dass es die Klasse irgendwo gibt.
Von daher wäre es ganz gut, den kompletten Code mal zu sehen.

Grüße
 

Estor

Mitglied
So ich hoffe ich habs ausgebessert :/ Das mit dem Konstruktor war natürlich blöd, ich hab soviel rumprobiert, dass ich viel weggelassen habe, der Übersicht wegen. Dabei sind wohl einige Fehler passiert. Wie siehts nun aus?
Also ich sollte vielleicht mal genauer beschreiben, worum es geht: Es geht um eine Aufgabe in der eine Adjazenzliste für einen Graphen erstellt werden muss. D.h. von der main aus wird die knotenanzahl/feldanzahl eingegeben um die Adjazenzliste zu erstellen und dann werden bestimmte Konstruktoren der Klasse Graph/FeldVonVerkettetenListen aufgerufen (hinzufügen, löschen und suchen), um Kanten aus der Adjazenzliste eben hinzuzufügen, zu suchen, oder zu löschen.
Mein Problem ist nun die Umsetzung der Adjazenzliste, da ich eine Nullpointerexeption kriege, wenn ich auf den Wert eines Elements zugreifen will "liste[knoten].getWert".
Soll ich die Main und die restlichen Methoden der Klasse "FeldVonVerkettetenListen" hier nochmal posten der Übersicht halber, oder kann man schon erkennen was das Problem ist?
 

Estor

Mitglied
Dann hier mal die komplette Aufgabe (wobei die Frage nur ist, was ich falsch mache bei der Feldbelegung mit Listenelementen, aber vielleicht hilft es ja dabei zu verstehen, was ich will):

Nochmal als Überblick, es geht darum eine Adjazenzliste zu erstellen die für eine eingegebene Knotenanzahl Kanten hinzufügen, löschen und suchen kann und Ergebnisse zurückliefert, die abgetestet werden.
Ich habe die Kommentare vom Prof jetzt mal dringelassen.

Die main zu Testzwecken (unveränderbar):
Java:
public class Testtreiber{
    public static void main (String[] args) {
    IGraph g = new Graph_MeinName(5);
    boolean status;
    if (g.kanteErfragen(3,4)==0)
        System.out.println("Erfolgreich: Kante (3,4) ist nicht vorhanden");
    else
        System.out.println("Fehler: Kante (3,4) wird fehlerhaft gemeldet");
    status = g.kanteHinzufuegen(2, 5);
    if (status) 
        System.out.println("Erfolgreich: Kante (2,5) hinzugefuegt");
    else
        System.out.println("Fehler: Kante (2,5) nicht hinzugefuegt");
    status = g.kanteHinzufuegen(2, 3);
    if (status) 
        System.out.println("Erfolgreich: Kante (2,3) hinzugefuegt");
    else
        System.out.println("Fehler: Kante (2,3) nicht hinzugefuegt");
    if (g.kanteErfragen(2,3)==2)
        System.out.println("Erfolgreich: Kante (2,3) mit zwei Vgl.");
    else
        System.out.println("Fehler bei Suche nach Kante (2,3) ");
    
    }
}

Das Interface (unveränderbar):
Java:
public interface IGraph {

    /* Ein Graph besteht aus Knoten der Menge 1,...,n und
       ist als Adjazenzliste gespeichert. Neue Kanten werden
       am Ende der betroffenen verketteten Liste angefuegt.
       Die Variable n wird individuell beim Anlegen eines
       Objekts bestimmt. Die Kanten koennen zur Laufzeit 
       modifiziert werden.
    */

    /* Kante wird eingefuegt.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: true, falls erfolgreich Kante neu gesetzt; sonst: false
    */
    public boolean kanteHinzufuegen(int von, int nach);

    /* Es wird geprueft, ob die Kante vorhanden ist.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: 0, falls die Kante nicht existiert; sonst: die Anzahl der 
       Vergleiche (bzw. betrachteten Kanten), um die Kante zu finden.
     */
    public int kanteErfragen(int von, int nach);

    /* Die Kante wird entfernt.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: keine
     */
    public void kanteLoeschen(int von, int nach);

}

Die Klasse in der programmiert wird:
Java:
public class Graph_MeinName implements IGraph {

    /* In den Attributen muss die Adjazenzliste verankert werden */


    /* Der Konstruktor hat ein Argument: die Anzahl der Knoten n 
     */
    public Graph_MeinName(int knotenzahl) {

    }

    /* Kante wird eingefuegt.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: true, falls erfolgreich Kante neu gesetzt; sonst: false
    */
    public boolean kanteHinzufuegen(int von, int nach) {
    return false;
    }

    /* Es wird geprueft, ob die Kante vorhanden ist.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: 0, falls die Kante nicht existiert; sonst: die Anzahl der 
       Vergleiche (bzw. betrachteten Kanten), um die Kante zu finden.
     */
    public int kanteErfragen(int von, int nach) {
    return -1;
    }

    /* Die Kante wird entfernt.
       Eingaben: Knotennummern des Start- bzw. Zielknotens
       Ausgabe: keine
     */
    public void kanteLoeschen(int von, int nach) {

    }

}

Meine Idee war, wie ich hoffe oben zu sehen ist, eine Klasse für die Elemente der verketteten Liste zu erstellen (diese hat also einen Wert (Knoten auf den die Kante zeigt) und einen Verweis auf den Nachfolger (next)).
Dann wird ein Feld von diesen Listenelementen erstellt (also die Adjazenzliste im Sinne von: "liste[knotenvon]" mit dem Wert "knotennach" und das next führt zum nächsten Element welches den Wert eines anderen Knoten hat mit dem "knotenvon" verbunden ist). Später wollte ich dann "kanteLoeschen" etc. schreiben für die ich auch schon konkrete Vorstellungen habe. Soweit der Plan...
Haken tut es im Moment an der Implementierung der Adjazenzliste, da ich anscheinend entweder bei meiner Listenelement-Klasse einen Fehler habe, bei der Belegung des Feldes mit Listenelementen oder irgendwo sonst. Ich vermute mal es ist etwas wirklich blödes, da ich bis jetzt nicht besonders viel mit Java gemacht habe.
Vielen Dank für jede Antwort ;)
 

InfectedBytes

Top Contributor
FeldVonVerkettenListen ist soweit korrekt und sollte keine Probleme bereiten.
Zeig daher mal deinen Code, bei dem das Problem auftritt. Also wo machst du liste[feldanzahl-1].getWert() ?
 

Estor

Mitglied
Java:
    public boolean kanteHinzufuegen(int von, int nach) {
        //falsche Knotennummer und bereits vorhandensein beachten
        if (!(von < 1 || knotenzahl < von || nach < 1 || knotenzahl < nach)) {
            Listenelement pos = liste[von-1];
            while (pos != null && pos.getWert() != nach) {
                pos = pos.getNext();
            }
            if (pos.getWert() == nach) { //Hier tritt die Nullpointerexception auf, auch wenn ich "pos" mit "liste[von-1].getWert" ersetze.
                return false;
            }
            //Das anhaengen hab ich auch in der class Listenelement, aber daran liegts ja nicht
            else {
                liste[von-1].anhaengen(nach);
                return true;
            }
        }
        else {
            return false;
        }
    }<von ||="" nach<1="" knotenzahl<nach))="" {

Alles noch nicht ganz ausgereift, da ich eben über die NPE(???) gestolpert bin und nicht weiterwusste :/

</von>
 
Zuletzt bearbeitet:

Estor

Mitglied
In der FeldVonVerkettetenListen bzw Graph_MeinName, wenn du die vorlage vom Prof nimmst.
Zugegriffen wird aus der main darauf.
 

InfectedBytes

Top Contributor
ich würde mal raten das hier dein Problem liegt:
Java:
 Listenelement pos = liste[von-1];
  while (pos != null && pos.getWert() != nach) {
                pos = pos.getNext();
            }
Nach der ersten Zeile ist pos ungleich null.
In der nächsten Zeile wird nun geprüft, ob pos!=null ist (das ist es auch) und ob pos.getWert()!=nach ist (das ist vermutlich auch der Fall) => pos wird auf pos.getNext() gesetzt, aber pos.getNext liefert null => pos ist null => NPE
 

Estor

Mitglied
Oh man... Danke... Mensch ist mir das peinlich :oops:
Das mir das nicht aufgefallen ist... Na ja vielen, vielen Dank nochmal und ich versuch mich jetzt weiter am Programm!
 

Estor

Mitglied
Zwei Fragen: Erstens, wenn ich pos mit liste belege, wird dann auch liste auf liste.next gesetzt, wenn ich pos = pos.getNext() schreibe?
Zweitens: Jetzt hab ich den Code folgendermaßen umgeändert:
Java:
while (pos.getNext() != null && pos.getWert() != nach) { //NPE
                pos = pos.getNext();
            }
Jetzt bekomme ich schon bei der while-Schleife eine NPE, aber eigentlich müsste doch alles okay sein, oder? Schließlich müsste jedes Element, welches auf ein weiteres Element ungleich NULL verweist auch einen Wert haben, den man abfragen kann...
 

Estor

Mitglied
Ah okay hat sich erledigt, es klappt doch :) Nochmal vielen Dank, ich weiß jetzt dank dir woran es lag und es hat nur nicht geklappt weil ich zwischendurch noch was umgestellt hatte ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Reflection: Suche Feld + in Unterklassen Java Basics - Anfänger-Themen 7
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
wofus Interface EditText Feld Multiline Dezimalzahl Java Basics - Anfänger-Themen 2
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
C Feld printen Java Basics - Anfänger-Themen 4
B Zu Property Feld weitere Informationen hinzufügen? Java Basics - Anfänger-Themen 4
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
J Button als Feld nutzen Java Basics - Anfänger-Themen 17
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
S Methoden Feld vergrößern Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
neerual Feld mit Einsen und Nullen füllen und überschreiben Java Basics - Anfänger-Themen 1
O Schlange als dynamisches Feld - Aufwand Java Basics - Anfänger-Themen 16
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
T Suchen in sortiertem Feld Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
W Processing bestimmtes Feld einfärben Java Basics - Anfänger-Themen 8
T csv Datein einlesen und ausgewähltes Feld ausgeben Java Basics - Anfänger-Themen 4
N zweidimensionales 10x10 Feld erstellen Java Basics - Anfänger-Themen 3
M Feld in untermethoden ausgeben Java Basics - Anfänger-Themen 9
Q OOP Mehrere Instanzen auf ein Feld Java Basics - Anfänger-Themen 13
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
W 10x10 Feld mit Zufallszahlen erstellen Java Basics - Anfänger-Themen 4
M Wert aus String Feld anzeigen Java Basics - Anfänger-Themen 7
M Warum ist dieses Feld der Klasse Math immutable? Java Basics - Anfänger-Themen 7
D Datentypen Zahlen aus einem alphanummerischen Feld in ein Interger Feld portieren Java Basics - Anfänger-Themen 13
L Daten aus Array Feld löschen Java Basics - Anfänger-Themen 2
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
V Feld sortieren mit Backtracking Java Basics - Anfänger-Themen 1
U Spielfelde erstellen & via Brute-Force jedes Feld aktivieren Java Basics - Anfänger-Themen 4
Z feld[zahl()-1] funktioniert nicht Java Basics - Anfänger-Themen 6
P Collections Feld aus Sets erstellen. Java Basics - Anfänger-Themen 7
E Methode, zwei Klassen, Feld Java Basics - Anfänger-Themen 9
T Ein Feld umdrehen Java Basics - Anfänger-Themen 5
T Erste Schritte Java ein Array Feld[index] zurueckgeben? Java Basics - Anfänger-Themen 20
Z Feld befüllen Java Basics - Anfänger-Themen 8
N Klasse/Konstruktor/Feld Java Basics - Anfänger-Themen 6
W Rückgabe Methode mit Feld Java Basics - Anfänger-Themen 4
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
T Generisches Feld in nicht-generischer Klasse möglich? Java Basics - Anfänger-Themen 5
S Einzelne Werte von Array-Feld löschen Java Basics - Anfänger-Themen 15
D Mysql ob feld existiert Java Basics - Anfänger-Themen 2
N Input/Output 2D Feld ausgeben? Java Basics - Anfänger-Themen 3
R Bestehendes Array ein Feld hinzufügen Java Basics - Anfänger-Themen 4
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
M Applet ist nur graues Feld Java Basics - Anfänger-Themen 12
G Gleiche Elemente in Feld zählen Java Basics - Anfänger-Themen 13
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
R Nächstes leeres Feld im array füllen? Java Basics - Anfänger-Themen 14
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
L Array um ein Feld erweitern Java Basics - Anfänger-Themen 13
E Button/Feld deaktivieren, ohne Styleauswirkung? Java Basics - Anfänger-Themen 5
D OOP Objekte in einem Feld ablegen Java Basics - Anfänger-Themen 7
P HTML <input> Feld in einem JLabel auslesen Java Basics - Anfänger-Themen 4
H text feld eine variable zu weisen Java Basics - Anfänger-Themen 3
J select-feld auswahl, jsp javascript Java Basics - Anfänger-Themen 2
M Feld übergeben & dann Werte in TextFelder schreiben Java Basics - Anfänger-Themen 4
B Wie kann ich unterschiedliche Datentypen in einem Feld abbilden? Java Basics - Anfänger-Themen 5
K Datentypen Referenzdatentyp Array (Feld) und Objektdatentyp Java Basics - Anfänger-Themen 14
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2
K Random Zahlen in ein Feld Java Basics - Anfänger-Themen 4
C Datentypen ArrayList.remove(index) hinterlässt leeres Feld Java Basics - Anfänger-Themen 5
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
B Static Referenz auf Non-static Feld Java Basics - Anfänger-Themen 6
C 1D Feld in Methode einbinden? Java Basics - Anfänger-Themen 4
B Zeichenfarbe in Feld speichern Java Basics - Anfänger-Themen 7
J Feld in Tabelle suchen Java Basics - Anfänger-Themen 8
K Java String UNICODE in DB UTF-8 Feld einfügen Java Basics - Anfänger-Themen 3
K feld von basisklasse ändern Java Basics - Anfänger-Themen 11
S Nullpointererror bei JButton-Feld Java Basics - Anfänger-Themen 2
A Ein Feld meiner jTable färben Java Basics - Anfänger-Themen 6
T Feld sortieren aber vorherigen Feldindex der Werte behalten Java Basics - Anfänger-Themen 9
kulturfenster Info-Feld erstellen Java Basics - Anfänger-Themen 2
G Feld auslesen und in Integer umwandeln Java Basics - Anfänger-Themen 4
G Feld in umgekehrter Reihenfolge an zweites Feld übergeben Java Basics - Anfänger-Themen 5
G Stopp Feld programmieren für Spielbrett Java Basics - Anfänger-Themen 8
K 3 Dimensionales Feld - Java und seine Grenzen Java Basics - Anfänger-Themen 4
S kompletten Datensatz statt nur ein Feld auslesen lassen,wie? Java Basics - Anfänger-Themen 3
H combobox auf leeres Feld prüfen? Java Basics - Anfänger-Themen 10
M wie auf ein feld mit leerzeichen in einem char array prüfen? Java Basics - Anfänger-Themen 4
G Feld Ein-/Ausgabe Java Basics - Anfänger-Themen 2
W Feld von boolean in main initialisieren. Java Basics - Anfänger-Themen 4
S Array Kopie zwei in eindimensionales feld Java Basics - Anfänger-Themen 4
S Feld<T> Java Basics - Anfänger-Themen 2
Z Feld prüfen ob 3 gleiche zahlen nach einander vorkommen Java Basics - Anfänger-Themen 3
B Char Feld -> "Zeilenumbruch" Java Basics - Anfänger-Themen 5
N zahlen und operatoren gemischt in einem Feld Java Basics - Anfänger-Themen 9
E JFileChooser- Dateiname Feld? Java Basics - Anfänger-Themen 2
H Wert an Feld übergeben? Java Basics - Anfänger-Themen 23
E Adobe Designer Drop Down Feld & If Abfrage Java Basics - Anfänger-Themen 4
J 2 dinemsionales Feld Java Basics - Anfänger-Themen 5
G Bestimmtes Feld aus ArrayList auslesen (nicht mit .get(x)?) Java Basics - Anfänger-Themen 27
S Background von JtextField bei Focus in dem Feld ändern Java Basics - Anfänger-Themen 6
G Instanzen in einem Feld erzeugen Java Basics - Anfänger-Themen 9
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
J Double[] Feld und Durchschnitt Java Basics - Anfänger-Themen 2
feuervogel feld zufällig sortieren Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben