Compiler-Fehler No such Field error

Castyll

Aktives Mitglied
Hallo,
Für die Universität mache ich grad eine Übungsaufgabe zu Verketteten Listen. So weit so gut, jedoch bekomm ich nun seit 1 Stunde probieren jedes mal den "No such Field error". Ich habe bereits gegoogelt und alte .class Dateien gelöscht, um das Terminal erneut kompilieren zu lassen aber der Fehler geht nicht weg. Hat jemand eine Idee woran es liegen könnte? Im Folgenden meinen Code Ausschnitt:

Java:
class Listenelement {
    Termin data;
    Listenelement next;
}

public class Liste {
 
    Listenelement head; // Pseudoelement fuer den Kopf der Liste
    Listenelement z;    // Pseudoelement fuer das Ende der Liste
 
    // leere Liste erzeugen
    public Liste(){
    head = new Listenelement();
    z = new Listenelement();
    head.data = null;
    head.next = z;
    z.data = null;
    z.next = z;
    }
 
    // Ausgabe aller Elemente der Liste
    public void print(){
    Listenelement ele = head.next;
    while (ele != z){
        System.out.println(ele.data);
        ele = ele.next;
    }
    }
 
    /*  *** Teilaufgabe (b) *** */


    public void insertSorted(Termin other){

Listenelement zeiger = head.next;

    if(zeiger.data.istVorher(other)==true)
    {
          Listenelement ele = new Listenelement();
        Listenelement zweites = new Listenelement();
        zweites = head;
        ele.next = head.next;
        ele.data = new Termin(other.tag,other.monat,other.jahr,other.todo);
        head = ele;
        head.next = zweites;
     
    }
 


 

    }




    public static void main(String[] args) {
    Liste liste1 = new Liste(); // neue Liste anlegen
    // Liste füllen
    liste1.insertSorted(new Termin(14,10,2016,"Zahnarzt"));
    liste1.insertSorted(new Termin(15,12,2016,"Klausur PP1"));
    liste1.insertSorted(new Termin(19,11,2016,"Theater"));
    liste1.insertSorted(new Termin(1,1,2017,"Konzert"));
    liste1.insertSorted(new Termin(21,12,2016,"Vortrag"));
    System.out.println("Liste 1: ");
    liste1.print();
    System.out.println("*****************");

Der Error verweist immer auf die Lines:
head.data = null;
oder
ele.data = new Termin(other.tag,other.monat,other.jahr,other.todo);

Deswegen gehe ich davon aus, dass irgendetwas mit data nicht stimmt. Was konnte ich noch nicht herausfinden. Die Klasse Termin existiert natürlich auch und auf Anfrage poste ich sie, jedoch wurde das meiste dieser Klasse von der Uni selbst vorgegeben.
Ich hoffe auf schnelle Rückmeldung
 

Tarrew

Top Contributor
Poste mal bitte die Termin Klasse.

Aber du erstellst am Anfang auch eine neue Liste und fügst einen Eintrag hinzu mit:
Java:
Liste liste1 = new Liste(); // neue Liste anlegen
// Liste füllen
liste1.insertSorted(new Termin(14, 10, 2016, "Zahnarzt"));

Beim Erstellen der Liste passiert das:
Java:
public Liste() {
    head = new Listenelement();
    z = new Listenelement();
    head.data = null;
    head.next = z;
    z.data = null;
    z.next = z;
}
Beachte, dass head.data = null und z.data = null;

Beim Einfügen des ersten Elementes ist die Liste machst du dann:
Java:
Listenelement zeiger = head.next;

if (zeiger.data.istVorher(other) == true) {

zeiger=head.next ist immer noch null. Deswegen sollte eig. ein NullPointerException fliegen anstatt dein Fehler mit "no such field".
 
Zuletzt bearbeitet:

Castyll

Aktives Mitglied
Poste mal bitte die Termin Klasse.
Java:
class Termin {
    public int tag;
    public int monat;
    public int jahr;
    public String todo;

    public Termin(int t, int m, int j, String s){
    tag = t;
    monat = m;
    jahr = j;
    todo = s;
    }

    /*  *** Teilaufgabe (a) *** */

    public boolean istVorher(Termin other)
    {
    if(this.monat<other.monat && this.jahr <= other.jahr)
    {
      return true;

    }

    if(this.tag < other.tag && this.monat <= other.monat && this.jahr <= other.jahr)
    {
      return true;

    }


    if(this.jahr < other.jahr)
    {

     return true;
    }

    else{

    return false;
    }

     }

    public String toString(){
    return tag + "." + monat + "." + jahr + "  " + todo;
    }
}

Hier ist die Termin Klasse wie gewünscht
 

Tarrew

Top Contributor
Also wie oben erwähnt liegt der Fehler mMn in der insertSorted Methode. Wenn noch kein Element in der Liste ist (bzw. wenn die initalen Listenelemente noch keine Daten enthalten, dann kannst du darauf keine Methoden aufrufen, weil "data" eben noch null ist.

Also vorher überprüfen ob data überhaupt vorhanden ist. An deiner Stelle würde ich die Listenelemente auch nur zusammen mit Daten einfügen. Ein leeres Listenelement ohne Daten ergibt für mich erstmal keinen Sinn.

Würde das so in der Art probieren:
Java:
public void insertSorted(Termin other) {
    Listenelement zeiger = head;
    
    while (zeiger.next != null) {
        if (!zeiger.next.istVorher(other)) {
            //element hier einfügen
            return;
        }
        zeiger = zeiger.next;
    }
    //Element hier einfügen
}

Da musst du dann auch noch drauf achten, dass der initiale Zeiger nicht null ist etc, aber es ist ein erster Ansatz ;)
 

Castyll

Aktives Mitglied
@Tarrew Das Problem ist, dass die Main Methode und das Einfügen der Daten dort vorgegeben waren :s Wie kann ich das also alternativ lösen? Leider haben wir in der Vorlesung nur eine Folie zu verkettete Listen gemacht und auch das Internet gibt nicht viel her.
 

Tarrew

Top Contributor
Die main-Methode ist kein Problem.

Aber ich kann mir nicht vorstellen, dass die insertSorted Methode so vorgegeben war.
 

Tarrew

Top Contributor
Wenn noch keine Daten da sind, dann ist data nunmal leer. Du musst es nur abfangen können.

Also vorher prüfen:
Java:
if(zeiger.data!=null){
//mache was mit data etc.
}
 

Castyll

Aktives Mitglied
Wenn noch keine Daten da sind, dann ist data nunmal leer. Du musst es nur abfangen können.

Also vorher prüfen:
Java:
if(zeiger.data!=null){
//mache was mit data etc.
}

Achso, also so:
Java:
    public void insertSorted(Termin other){

Listenelement zeiger = head.next;
if(zeiger.data!=null){
    if(zeiger.data.istVorher(other)==true)
    {
          Listenelement ele = new Listenelement();
        Listenelement zweites = new Listenelement();
        zweites = head;
        ele.next = head.next;
        ele.data = new Termin(other.tag,other.monat,other.jahr,other.todo);
        head = ele;
        head.next = zweites;
    
    }



    }
}

Aber so wie ich es verstanden habe, ist doch Data seit Start des Programmes null, wird dann überhaupt irgendwas aufgerufen?
 

Tarrew

Top Contributor
Ne da haste schon Recht. Deswegen habe ich dir oben mal ein anderen Lösungsvorschlag gemacht wie man an die Sache herangehen kann.
 

Castyll

Aktives Mitglied
Ne da haste schon Recht. Deswegen habe ich dir oben mal ein anderen Lösungsvorschlag gemacht wie man an die Sache herangehen kann.

Ok also an 2 Stellen einfügen, dann werde ich das so probieren. Nur noch eine Frage: Wie würdest du mir das einfügen von Daten empfehlen? Man verlegt ja im Grunde die Referenzen wie ich es gemacht habe, aber das schien ja bei mir nicht zu funktionieren.
 

Tarrew

Top Contributor
Also mal eine kleine Hilfestellung wie ich das machen würde:

Beim initialisieren der Liste, fügst du schon 2 Listenelemente ein. Die haben allerdings keine Termine "im Bauch". Deswegen solltest du die ganz weglassen. Deinen Konstruktor kannste damit eigentlich löschen.
Implizit würde der dann so aussehen:

Java:
    // leere Liste erzeugen
    public Liste() {

    }

Dann zum Einfügen:
Java:
    public void insertSorted(Termin other) {
        //dein Head zum iterieren über die Liste
        Listenelement zeiger = head;
       
        //das neue Element, dass eingefügt werden soll
        Listenelement item = new Listenelement();
        item.data = other;
      
        //Die Liste ist leer, also setze den Head auf das neue Element und beende die Methode
        if (zeiger == null) {
            //ToDo
        }

        //Der Termin liegt vor deinem ersten Termin, also setze head = item, und item.next = alter Head
        if (other.istVorher(zeiger.data)) {
           //ToDo
        }

       //Durchlaufe die Liste
        while (zeiger.next != null) {
           //Der einzufügende Termin liegt vor dem nächsten Termin in der Liste, also füge ihn hier ein und beende die Methode
            if (other.istVorher(zeiger.next.data)) {
                //ToDo
            }
            zeiger = zeiger.next;
        }
        //Die Liste wurde komplett durchlaufen und der neue Termin wurde noch nicht eingefügt, also hänge ihn am Ende an. 
        //ToDo
    }
 

Castyll

Aktives Mitglied
Also mal eine kleine Hilfestellung wie ich das machen würde:

Beim initialisieren der Liste, fügst du schon 2 Listenelemente ein. Die haben allerdings keine Termine "im Bauch". Deswegen solltest du die ganz weglassen. Deinen Konstruktor kannste damit eigentlich löschen.
Implizit würde der dann so aussehen:

Java:
    // leere Liste erzeugen
    public Liste() {

    }

Dann zum Einfügen:
Java:
    public void insertSorted(Termin other) {
        //dein Head zum iterieren über die Liste
        Listenelement zeiger = head;
      
        //das neue Element, dass eingefügt werden soll
        Listenelement item = new Listenelement();
        item.data = other;
     
        //Die Liste ist leer, also setze den Head auf das neue Element und beende die Methode
        if (zeiger == null) {
            //ToDo
        }

        //Der Termin liegt vor deinem ersten Termin, also setze head = item, und item.next = alter Head
        if (other.istVorher(zeiger.data)) {
           //ToDo
        }

       //Durchlaufe die Liste
        while (zeiger.next != null) {
           //Der einzufügende Termin liegt vor dem nächsten Termin in der Liste, also füge ihn hier ein und beende die Methode
            if (other.istVorher(zeiger.next.data)) {
                //ToDo
            }
            zeiger = zeiger.next;
        }
        //Die Liste wurde komplett durchlaufen und der neue Termin wurde noch nicht eingefügt, also hänge ihn am Ende an.
        //ToDo
    }
Okay so habe ich es nun gemacht. Nur der letzte Punkt fiel mir schwer:

Java:
public void insertSorted(Termin other) {
        //dein Head zum iterieren über die Liste
        Listenelement zeiger = head;
      
        //das neue Element, dass eingefügt werden soll
        Listenelement item = new Listenelement();
        item.data = other;
     
        //Die Liste ist leer, also setze den Head auf das neue Element und beende die Methode
        if (zeiger == null) {
            head = item;
        return;
        }

        //Der Termin liegt vor deinem ersten Termin, also setze head = item, und item.next = alter Head
        if (other.istVorher(zeiger.data)) {
       Listenelement alterHead = new Listenelement();
       alterHead = head;
           head = item;
       item.next = alterHead;
        }

       //Durchlaufe die Liste
        while (zeiger.next != null) {
           //Der einzufügende Termin liegt vor dem nächsten Termin in der Liste, also füge ihn hier ein und beende die Methode
            if (other.istVorher(zeiger.next.data)) {
                Listenelement alterTermin = new Listenelement();
          alterTermin = zeiger.next;
              zeiger.next = item;
           item.next = alterTermin;
        return;
            }
            zeiger = zeiger.next;
        }
        //Die Liste wurde komplett durchlaufen und der neue Termin wurde noch nicht eingefügt, also hänge ihn am Ende an.
        //unsicher:
    zeiger.next = item;
    item.next = z;
   
   
    }
 

Tarrew

Top Contributor
Okay so habe ich es nun gemacht. Nur der letzte Punkt fiel mir schwer:

Java:
public void insertSorted(Termin other) {
        //dein Head zum iterieren über die Liste
        Listenelement zeiger = head;
    
        //das neue Element, dass eingefügt werden soll
        Listenelement item = new Listenelement();
        item.data = other;
   
        //Die Liste ist leer, also setze den Head auf das neue Element und beende die Methode
        if (zeiger == null) {
            head = item;
        return;
        }
        
        //Der Termin liegt vor deinem ersten Termin, also setze head = item, und item.next = alter Head
        if (other.istVorher(zeiger.data)) {
       Listenelement alterHead = new Listenelement();
       alterHead = head;
           head = item;
       item.next = alterHead;
        }

       //Durchlaufe die Liste
        while (zeiger.next != null) {
           //Der einzufügende Termin liegt vor dem nächsten Termin in der Liste, also füge ihn hier ein und beende die Methode
            if (other.istVorher(zeiger.next.data)) {
                Listenelement alterTermin = new Listenelement();
          alterTermin = zeiger.next;
              zeiger.next = item;
           item.next = alterTermin;
        return;
            }
            zeiger = zeiger.next;
        }
        //Die Liste wurde komplett durchlaufen und der neue Termin wurde noch nicht eingefügt, also hänge ihn am Ende an.
        //unsicher:
    zeiger.next = item;
    item.next = z;
 
 
    }
Also das item am Anfang einfügen ist richtig. Danach sind 2-3 unnötige Sachen drin.
Java:
Listenelement alterHead =new Listenelement();
       alterHead = head;

Du brauchst du bei solchen Dingen kein neues Objekt. Du kannst einfach die Referenz auf ein bestehendes Objekt setzen:
Java:
Listenelement alterHead = head;

Allgemein sind die ersten zwei if-Abfragen aber richtig.

Danach wieder das gleiche:
Java:
Listenelement alterTermin =new Listenelement();
          alterTermin = zeiger.next;
besser schreiben als:
Java:
Listenelement alterTermin = zeiger.next;

Ansonsten passt das aber. Das "z" für das letzte Element halte ich persönlich für unnötig aber in Ordnung. Hab deinen Code auch getestet und das passt alles.

Vermutlich vermisst du einen Eintrag in der Ausgabe? Dann solltest du dir deine print() Methode nochmal angucken ;)
 

Castyll

Aktives Mitglied
Also das item am Anfang einfügen ist richtig. Danach sind 2-3 unnötige Sachen drin.
Java:
Listenelement alterHead =new Listenelement();
       alterHead = head;

Du brauchst du bei solchen Dingen kein neues Objekt. Du kannst einfach die Referenz auf ein bestehendes Objekt setzen:
Java:
Listenelement alterHead = head;

Allgemein sind die ersten zwei if-Abfragen aber richtig.

Danach wieder das gleiche:
Java:
Listenelement alterTermin =new Listenelement();
          alterTermin = zeiger.next;
besser schreiben als:
Java:
Listenelement alterTermin = zeiger.next;

Ansonsten passt das aber. Das "z" für das letzte Element halte ich persönlich für unnötig aber in Ordnung. Hab deinen Code auch getestet und das passt alles.

Vermutlich vermisst du einen Eintrag in der Ausgabe? Dann solltest du dir deine print() Methode nochmal angucken ;)
Die Exception die ich die ganze Zeit hatte, ist nun weg, danke :) Und die Ausgabe funktioniert auch, gott sei Dank ,die hätte ich nämlich nicht ändern können, da das vorgegeben war. Vielen, vielen Dank :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Such- und Ausgabefunktion Java Basics - Anfänger-Themen 39
C Methoden numberField.getDouble no such method error Java Basics - Anfänger-Themen 4
L no such method error: main() Java Basics - Anfänger-Themen 2
S geeignetes Such Pattern Java Basics - Anfänger-Themen 6
D binaeres such problem. Java Basics - Anfänger-Themen 7
J Such-algorithmus Java Basics - Anfänger-Themen 15
D Optionals als field Java Basics - Anfänger-Themen 1
B Get property field von Name Java Basics - Anfänger-Themen 9
B OOP next cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
K Compiler-Fehler Button cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
T Cannot refer to an instance field xxx while explicitly invoking a constructor Java Basics - Anfänger-Themen 14
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
R Compiler-Fehler sequenz cannot be resolved or is not a field Java Basics - Anfänger-Themen 2
K OOP Vererbtes Field über Class Objekt Java Basics - Anfänger-Themen 3
G field public/private wann Java Basics - Anfänger-Themen 11
I Verwendung von Constant Field Values Java Basics - Anfänger-Themen 4
J Interface: The final field Variablen.N cannot be assigned Java Basics - Anfänger-Themen 2
G access static field Java Basics - Anfänger-Themen 2
F Read access to enclosing field xy is emulated . Java Basics - Anfänger-Themen 2
S Field einer abstrakten Klasse wird nicht gesetzt Java Basics - Anfänger-Themen 2
D Field Java Basics - Anfänger-Themen 4
T Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 8
T GUI, JMenuBar Fehler: The field menuBar is not visible Java Basics - Anfänger-Themen 7
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
monsterherz error: <identifier> expected Java Basics - Anfänger-Themen 2
R Compiler-Fehler identifier error? Java Basics - Anfänger-Themen 3
N Compiler-Fehler Not a statement Error Java Basics - Anfänger-Themen 7
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
richrich99 error: illegal start of expression Java Basics - Anfänger-Themen 10
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
N Compiler-Fehler State Machine - Compiler Error Java Basics - Anfänger-Themen 48
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
Gaudimagspam Compiler Error Java Basics - Anfänger-Themen 3
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
A Scanner-Error Java Basics - Anfänger-Themen 8
Elyt Error: incompatible types Java Basics - Anfänger-Themen 3
I Client ObjectInputStream error... Java Basics - Anfänger-Themen 5
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
C error: <identifier> expected Java Basics - Anfänger-Themen 13
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
N Methoden Unerklärliche Error Meldung Java Basics - Anfänger-Themen 3
ZH1896ZH Datentypen Error bei For-Schleife Java Basics - Anfänger-Themen 2
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
9 Error bei .split() Java Basics - Anfänger-Themen 2
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
F Ausdruck wirft unerwarteten Error Java Basics - Anfänger-Themen 2
T Unverständlicher Launch-Error Java Basics - Anfänger-Themen 11
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
J Syntax error on token ";",, expected Java Basics - Anfänger-Themen 2
W double*double error Java Basics - Anfänger-Themen 4
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
C Erste Schritte Syntax Error Java Basics - Anfänger-Themen 23
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
H Compiler-Fehler error not a statement Java Basics - Anfänger-Themen 2
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
Chr1s Interpreter-Fehler Error Fehlercode Java Basics - Anfänger-Themen 7
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
S Compiler-Fehler error: ';' expected (finde Fehler nicht) Java Basics - Anfänger-Themen 10
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
Joew0815 Error org.apache.xmlrpc.client.XmlRpcClientConfigImpl.setUserAgent Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
C Exception Error Java Basics - Anfänger-Themen 15
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
B Not a statement error Java Basics - Anfänger-Themen 2
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
F java Ip ping + Dateiausgabe error ! Java Basics - Anfänger-Themen 3
O Exception Error Java Basics - Anfänger-Themen 3
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben