Unverständliche Fehlermeldung

nbergmann

Aktives Mitglied
Mein Programm "KontoTest2.java" produziert immer diese unverständliche Fehlermeldung.
Leider weiß ich nicht, wie man 2 Screenshots hier einbindet.
Daher den Screenshots des Hauptprogrammes mit Fehlermeldung in meiner zweiten Anfrage


Screenshot 2022-01-23 19.19.11.png
 
Hier den Quellcode und die Fehlermeldung neu:

package de.habelitz.uebung06;

public class KontoTest2 {
public static void main(String[] args) {

var a = new Konto("0000000001", 1000.0);

System.out.println("Konto Nr. ");
}
}
}
Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:

at javaUebung05/de.habelitz.uebung06.KontoTest2.main(KontoTest2.java:4)




package de.habelitz.uebung06;

public class Konto {
private String Kontonummer;
private double Kontostand;

Konto(String kn, double ks) {
Kontonummer = kn;
Kontostand = ks;
}

String getKontonummer() {
return Kontonummer;
}

double getKontostand() {
return Kontostand;
}

void einzahlen(double betrag) {
Kontostand += betrag;
}

void auszahlen(double betrag) {
Kontostand -= betrag;
}

}
 
Hier den Quellcode und die Fehlermeldung neu:

package de.habelitz.uebung06;

public class KontoTest2 {
public static void main(String[] args) {

var a = new Konto("0000000001", 1000.0);

System.out.println("Konto Nr. ");
}
}
}
Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:

at javaUebung05/de.habelitz.uebung06.KontoTest2.main(KontoTest2.java:4)




package de.habelitz.uebung06;

public class Konto {
private String Kontonummer;
private double Kontostand;

Konto(String kn, double ks) {
Kontonummer = kn;
Kontostand = ks;
}

String getKontonummer() {
return Kontonummer;
}

double getKontostand() {
return Kontostand;
}

void einzahlen(double betrag) {
Kontostand += betrag;
}

void auszahlen(double betrag) {
Kontostand -= betrag;
}

}
Was meinst du mit "var" a ? Du möchtest doch eine Instanz von deinem Konto erstellen ?
Das wäre so möglich " Konto konto1 (zb) = new Konto("0001",10.0);
 
Und was möchtest du genau ausgeben ? Ich schätze mal die Kontonummer, welche du über deinen konstruktor Initialisiert hast.
Bis jetzt gibst du ja nur den String " Konto Nr : " aus
 
um das jetzt mal "in depth" zu analysieren
1. du hast keine IDE, diese würde dir helfen vor Compilier errors , und formatierung
2. dein var ist richtig genutzt ... weis nicht was @Sandro95 da ansprechen wollte das ist valide von der Syntax, hast du aber java 10 oder größer ? vor java 10 gibts des nicht ( aber das denke ich dass du hast )

jetzt zu deinem Problemchen
Java:
public class KontoTest2 {
public static void main(String[] args) {

var a = new Konto("0000000001", 1000.0);

System.out.println("Konto Nr. ");
}
}
}
meines erachtens gehen da 2 Klammern auf und 3 zu 😀

gut problem gelöst ...

als nächstes Camel case einhalten in java https://ao.ms/camelcase-method-in-java/

dh attribute klein ... Kontonummer wird zu kontoNummer


da ist nur das rechenzeichen ein unterschied das kannst du eleganter lösen:
Java:
void einzahlen(double betrag) {
Kontostand += betrag;
}

void auszahlen(double betrag) {
Kontostand -= betrag;
}
in dem du eine Private rein schummelst
Java:
private void verbuchen(double betrag){
    kontoStand += betrag;
}

void einzahlen(double betrag) {
   verbuchen(betrag);
}

void auszahlen(double betrag) {
  verbuchen(-betrag);
}
da du nur die vorzeichen umdrehen musst
 
Zuletzt bearbeitet von einem Moderator:
Was meinst du mit "var" a ? Du möchtest doch eine Instanz von deinem Konto erstellen ?
Das wäre so möglich " Konto konto1 (zb) = new Konto("0001",10.0);
"var" ist ein Keyword Typinferenz

sein Ausdruck ist somit richtig.


 
dir gehts nicht mehr auf den Sack lokal immer genau exakt variablen zu deklarieren

zb
Java:
void x (){
    BorderPane xyz = new BorderPane();
}
wird zu
Java:
void x (){

    var xyz = new BorderPane();

}
ist halt wesentlich kürzer und die IDE löst das auch auf im regelfall.. macht dir das programmieren einfacher
 
Mart, ich danke für deine Informationen.

1)
Wie bekomme ich eine IDE?
2)
Das mit der "Klammer zuviel" lässt sich nicht lösen:
Lösche ich die Klammer, fordert Eclipse sie in einer Fehlermeldung wieder ein.
Setze ich sie ein, bemängelt er das in der letzten Zeile. Es kommt aber keine Fehlermeldung mehr.
3)
Ich benutze Java 17.
4)
Zur Schreibweise:
Ich halte mich stur an die Schreibweise meines Lernbuch-Autors Hans Peter Habelitz.
Dabei ist mir auch schon augefallen, das der sich oft nicht an diese von ihm auch empfohlenen Schreibweisen hält.

Mein Problem ist noch nicht gelöst.




um das jetzt mal "in depth" zu analysieren
1. du hast keine IDE, diese würde dir helfen vor Compilier errors , und formatierung
2. dein var ist richtig genutzt ... weis nicht was @Sandro95 da ansprechen wollte das ist valide von der Syntax, hast du aber java 10 oder größer ? vor java 10 gibts des nicht ( aber das denke ich dass du hast )

jetzt zu deinem Problemchen
Java:
public class KontoTest2 {
public static void main(String[] args) {

var a = new Konto("0000000001", 1000.0);

System.out.println("Konto Nr. ");
}
}
}
meines erachtens gehen da 2 Klammern auf und 3 zu 😀

gut problem gelöst ...

als nächstes Camel case einhalten in java https://ao.ms/camelcase-method-in-java/

dh attribute klein ... Kontonummer wird zu kontoNummer


da ist nur das rechenzeichen ein unterschied das kannst du eleganter lösen:
Java:
void einzahlen(double betrag) {
Kontostand += betrag;
}

void auszahlen(double betrag) {
Kontostand -= betrag;
}
in dem du eine Private rein schummelst
Java:
private void verbuchen(double betrag){
    kontoStand += betrag;
}

void einzahlen(double betrag) {
   verbuchen(betrag);
}

void auszahlen(double betrag) {
  verbuchen(-betrag);
}
da du nur die vorzeichen umdrehen musst
 
Eclipse ist eine IDE , kopier mal exakt das was in den Klassen drin steht in code tags, also STRG + A und STRG +C und dann in code tags posten

und zusätzlich diese klassen sind schon in unterschieldichen dateien?
 
1) wenn du Eclipse benutzt hast du ja eine IDE

2) hast du die zweite Klasse etwa in der gleichen Datei?

Java:
package de.habelitz.uebung06;

public class KontoTest2 {
   public static void main(String[] args) {

   var a = new Konto("0000000001", 1000.0);

   System.out.println("Konto Nr. ");
  }
}

das ist eine Datei

die zweite Klasse solte in einer anderen Datei sein.
Klassen name und Datei name soltte gleich sein
 
Der Fehler, den du da hast, geht tatsächlich einfach nur auf den fehlenden Konstruktor zurück, den hast du dann ja hinzugefügt. Aber hast du die Klasse "Konto" danach neu kompilieren lassen?
Kann sein, dass dein Compiler immer noch auf eine veraltete Version der Klasse zugreift.

@Jw45 laut den oben gezeigten Screenshots passen die Dateinamen.
 
d
Eclipse ist eine IDE , kopier mal exakt das was in den Klassen drin steht in code tags, also STRG + A und STRG +C und dann in code tags posten

und zusätzlich diese klassen sind schon in unterschieldichen dateien?

Diese Symbolleiste, die mit dem cde tags beginnt, ist nicht aktiviert. Daher sende ich dir die beiden Dateien als Anhang.
 

Anhänge

also bei KontoTest2 gehört auf jeden Fall die Letzte klammer weg... ich hab die klassen ge copy pasted ohne der zusätzlichen klammer und diese sind gültig
 
dass die code tags nicht aktiviert sind kann ich nicht glauben.. du klickst da drauf und dann poppt ein fenster auf... außer du hast nen internet explorer
 
also bei KontoTest2 gehört auf jeden Fall die Letzte klammer weg... ich hab die klassen ge copy pasted ohne der zusätzlichen klammer und diese sind gültig
Ich habe die Klammer gelöscht und das Programm dan mit "Run" gestartet. Hier die Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert "}" to complete ClassBody

at javaUebung05/de.habelitz.uebung06.Konto.<init>(Konto.java:26)
at javaUebung05/de.habelitz.uebung06.KontoTest2.main(KontoTest2.java:6)
 
Ich habe die Klammer gelöscht und das Programm dan mit "Run" gestartet. Hier die Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert "}" to complete ClassBody

at javaUebung05/de.habelitz.uebung06.Konto.<init>(Konto.java:26)
at javaUebung05/de.habelitz.uebung06.KontoTest2.main(KontoTest2.java:6)
Die Datei enthält in dem oben geposteten Zustand aber tatsächlich eine Klammer zu viel ...
Java:
package de.habelitz.uebung06;

public class KontoTest2 {
  public static void main(String[] args) {
    var a = new Konto("0000000001", 1000.0);
    System.out.println("Konto Nr. ");
  }
}
Wenn du dir die Einrückungen anschaust, dann siehst du, dass jede offene Klammer mit eine geschlossenen gepaart ist.
Wenn man nach anständiger Formatierung mal so was hat, dann ist da eine zu viel.
Java:
}
}

Laut Fehlermeldung fehlt eine Klammer in Konto.java.
Ich hab die Datei mal runtergeladen, die Klammer ist da, aber dahinter folgen ein paar Zeichen inklusive nul-Werten, das sollte nciht sein, vielleicht hat der Compiler damit Probleme. Lösch mal inklusive der Letzten Klammer alles danach weg und schreib diese neu rein.
 
es kann an einem unsichtbaren zeichen liegen... oder dem packageNamen .... oder es ist ein eclipse bug... aufjedenfall ist nach dem entfenren der 1en Klammer der Code richtig...
 
gegenprobe mach mal bei deiner KontoStand2 klasse STRG + A und lösch alles und paste das rein
Java:
package de.habelitz.uebung06;

public class KontoTest2 {
  public static void main(String[] args) {
    
    var a = new XYZ("0000000001", 1000.0);
      
    System.out.println("Konto Nr. ");
    }
}
class XYZ {
  private String Kontonummer;
  private double Kontostand;
 
 XYZ(String kn, double ks)  {
    Kontonummer = kn;
    Kontostand = ks; 
  }
 
  String getKontonummer()  {
    return Kontonummer;   
  }
 
  double getKontostand()  {
    return Kontostand;   
  }
    
  void einzahlen(double betrag)  {
      Kontostand += betrag;
       }
 
  void auszahlen(double betrag)  {
      Kontostand -= betrag;
       }
    
     }
wenn das was rotes anzeigt ist es irgendwas in eclipse... => neue datei anlegen und copy pasten


ab dann löscht du einfach die lokale XYZ klasse und ersetzt sie durch das Konto ab dann solls wieder funktionieren
 
Du hast ja viele Klassen in deinem Projekt. Wo du bestimmt auch Beispiele mit noch einer main Methode hast.

Bist du dir sicher das du bei klick auf run die main Methode von der Klasse starten tust. Nicht etwa eine andere die du vorher getestet hast.
 
rechtsklick auf datei => run => run as java app
führt dazu dass du genau in dieser datei die main methode ausführst .. um den vorherigen Vorschlag umzusetzen
 
gegenprobe mach mal bei deiner KontoStand2 klasse STRG + A und lösch alles und paste das rein
Java:
package de.habelitz.uebung06;

public class KontoTest2 {
  public static void main(String[] args) {
   
    var a = new XYZ("0000000001", 1000.0);
     
    System.out.println("Konto Nr. ");
    }
}
class XYZ {
  private String Kontonummer;
  private double Kontostand;
 
 XYZ(String kn, double ks)  {
    Kontonummer = kn;
    Kontostand = ks;
  }
 
  String getKontonummer()  {
    return Kontonummer;  
  }
 
  double getKontostand()  {
    return Kontostand;  
  }
   
  void einzahlen(double betrag)  {
      Kontostand += betrag;
       }
 
  void auszahlen(double betrag)  {
      Kontostand -= betrag;
       }
   
     }
wenn das was rotes anzeigt ist es irgendwas in eclipse... => neue datei anlegen und copy pasten


ab dann löscht du einfach die lokale XYZ klasse und ersetzt sie durch das Konto ab dann solls wieder funktionieren
Der Code wird nicht gehn das währen zwei Klassen in einer Datei.
 
natürlich geht der 😀

wer sagt es geht nur 1e Klasse pro datei ?

es geht nur 1e PUBLIC klasse pro datei(die es geben muss )... abe rdu kannst unendlich viele public private und protected klassen machen wie du willst in einer datei
 
gegenprobe mach mal bei deiner KontoStand2 klasse STRG + A und lösch alles und paste das rein
Java:
package de.habelitz.uebung06;

public class KontoTest2 {
  public static void main(String[] args) {
   
    var a = new XYZ("0000000001", 1000.0);
     
    System.out.println("Konto Nr. ");
    }
}
class XYZ {
  private String Kontonummer;
  private double Kontostand;
 
 XYZ(String kn, double ks)  {
    Kontonummer = kn;
    Kontostand = ks;
  }
 
  String getKontonummer()  {
    return Kontonummer;  
  }
 
  double getKontostand()  {
    return Kontostand;  
  }
   
  void einzahlen(double betrag)  {
      Kontostand += betrag;
       }
 
  void auszahlen(double betrag)  {
      Kontostand -= betrag;
       }
   
     }
wenn das was rotes anzeigt ist es irgendwas in eclipse... => neue datei anlegen und copy pasten


ab dann löscht du einfach die lokale XYZ klasse und ersetzt sie durch das Konto ab dann solls wieder funktionieren
Dein Programm funktioniert!
Ersetze ich aber "XYZ" in der 4. Zeile durch "Konto" und neutralisiere alles nach der 9. Zeile mit //, zeigt Eclipse mir in der 4. Zeile schon an: "The value of the local variable a is not used."
 
Ersetze ich aber "XYZ" in der 4. Zeile durch "Konto" und neutralisiere alles nach der 9. Zeile mit //, zeigt Eclipse mir in der 4. Zeile schon an: "The value of the local variable a is not used."
Wenn das danach der Code ist, dann stimmt das ja auch, denn du nutzt die Variable "a" ja auch nicht.
Java:
public class KontoTest2 {
  public static void main(String[] args) {
 
    var a = new Konto("0000000001", 1000.0); // "a" wird erzeugt und mehr passiert damit nicht
 
    System.out.println("Konto Nr. ");
    }
}
 
Zuletzt bearbeitet:
The value of the local variable a is not used.

Ist ja auch kein Fehler sondern nur ein Hinweis der IDE an dich das du eine Variable hast die du nicht benutzt.
Danke für deine Info.
Hier die Verbesserung, in der diese Fehlermeldung nicht mehr auftaucht:

package de.habelitz.uebung06;
public class KontoTest3 {
public static void main(String[] args) {
var a = new Konto("0000000001", 1000.0);
System.out.println("Konto Nr. " + a.getKontonummer());
}
}

Dafür kommt jetzt wieder die alte Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert "}" to complete ClassBody

at javaUebung05/de.habelitz.uebung06.Konto.<init>(Konto.java:26)
at javaUebung05/de.habelitz.uebung06.KontoTest3.main(KontoTest3.java:6)

Hier fehlt aber kein "}"!
 
Und wie sieht die Klasse Konto aus?

Bitte Codetags verwenden!
Java:
package de.habelitz.uebung06;

public class KontoTest3 {
    public static void main(String[] args) {
        var a = new Konto("0000000001", 1000.0);
        System.out.println("Konto Nr. " + a.getKontonummer());
    }
}

Und Frage: Wenn du das + a.getKontonummer() weglässt, dann geht es (bis auf die Warnung)?
 
Zuletzt bearbeitet:
@nbergmann
Es wurde nun offt genug gesagt das du Code bitte in dem Code Block posten sollst.
Wie das geht wurde dir auch gezeigt
Alle die sich hier mit deinem Problem beschäftigen benutzen das auch, nur du nicht. Wer will hier Hilfe. Da wirst du es doch schaffen das auch zu benutzen.

Das macht Code lesen im viel einfacher.

Traurig das ich das hier nochmal ansprechen muss.

Schaue Post #6
 
Zuletzt bearbeitet:
Erstelle doch mal ein neues Projekt in dem nur dise zwei Dateien sind.

Es könnte ja auch sein das bei der Menge an Beispiel Datein in deinem Projekt der Fehler wo anders ligt.
Mache ein eigenes Projekt benutze nicht das von deinen Buch vorgegebe Projekt.


Denn wenn ich mir deinen ersten Screenshot ansehe da sind in vielen Datein Fehler die die IDE mit einen Symbol markiert hast.
Die soltest du abstellen.
 
Zuletzt bearbeitet:
und benutze packages... das sind ordner.... ab dann weist du was du überhaupt ausführst

"compile" errors passieren nur dann in eclipse wenn eclipse sich selbst nimmer auskennt,bzw eclipse versucht dich davon abzuhalten das programm zu starten... dh ich glaube du lädst eine Konto Klasse die Definitiv rot gekennzeichnet ist und eclipse versucht diese zu parsen aber packts nicht und damit kommt der grampf raus

also neues projekt und dann mit packages ( im prinzip ordner ) arbeiten machts einfacher
 
natürlich geht der 😀

wer sagt es geht nur 1e Klasse pro datei ?

es geht nur 1e PUBLIC klasse pro datei(die es geben muss )... abe rdu kannst unendlich viele public private und protected klassen machen wie du willst in einer datei
Das sind dann innere Klassen. Auf Dateilevel darf es nur eine geben.
Das hat jetzt keinen großartigen Sinn außer dem, dass der ClassLoader so funktioniert. Man könnte auch den Class-Loader so umschreiben, dass er alle Klassen in der selben Datei sucht.
 
Danke für deine Info.
Hier die Verbesserung, in der diese Fehlermeldung nicht mehr auftaucht:

package de.habelitz.uebung06;
public class KontoTest3 {
public static void main(String[] args) {
var a = new Konto("0000000001", 1000.0);
System.out.println("Konto Nr. " + a.getKontonummer());
}
}

Dafür kommt jetzt wieder die alte Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert "}" to complete ClassBody

at javaUebung05/de.habelitz.uebung06.Konto.<init>(Konto.java:26)
at javaUebung05/de.habelitz.uebung06.KontoTest3.main(KontoTest3.java:6)

Hier fehlt aber kein "}"!
Wie gesagt, es liegt nicht an KontoTest3.java, sondern an Konto.java (schau dir mal die Fehlermeldung an, der oberste Eintrag ist der Ort, wo der Fehler aufgetreten ist, darunter folgt dann der Aufruf = Stacktrace).

Ich glaub, hier ist schlicht und einfach die Datei im A..., enthält irgendwelche Sonderzeichen, die der Compiler nicht erkennt. Wie schon gestern erwähnt, hab ich sie aufgemacht und hinten stand irgendwelcher Müll drin. Hast du den Text von irgendwoher kopiert? Erstell die Datei einfach nochmal neu und tippe den Text manuell ein oder pass beim Einfügen zumindest darauf auf, dass das letzte Zeichen die geschwungene Klammer ist.
 

Zurück
Oben