reached end of file while parsing oder 3 errors

primus1998

Mitglied
Hallo liebe Community,

ich habe folgendes Problem:
ich habe ein kleines Anfängerprogramm geschrieben, dass eine Zahl daraufhin überprüft, ob sie eine Primzahl ist. Soweit so gut. Doch beim erstellen des Bytecodes kam die (einzige) Errormeldung:

Primzahltest.java:48: error: reached end of file while parsing
}
^
1 error


Sooo Dr. Google brachte mich auf die Lösung, eine geschweifte Klammer am Ende anzuhängen. Doch als ich dann versucht habe, den Bytecode zu erstellen, kamen drei Errormeldungen:

Primzahltest.java:7: error: possible loss of precision
zahl = Double.parseDouble(args[0]);
^
required: int
found: double
Primzahltest.java:9: error: cannot find symbol
half = zahl / 2;
^
symbol: variable half
location: class Primzahltest
Primzahltest.java:20: error: cannot find symbol
for (b = 2; b < half; b++)
^
symbol: variable half
location: class Primzahltest
3 errors


Was muss ich jetzt machen??? Anbei den Orginalquellcode:

Java:
public class Primzahltest 
    {
    public static void main(String[] args ) 
        {
        int i, zahl, b;
        boolean IstPrim;
        zahl = Double.parseDouble(args[0]);
        IstPrim = true;
        half = zahl / 2;
        i = 0;
        if (zahl < 2) 
            {
            i = i + 1;
            IstPrim = false;
            }
          else 
            { 
            i = i;
            }
        for (b = 2; b < half; b++) 
            {
                if (zahl % b == 0);
                    {
                    i = i + 1;
                    System.out.println("Es wurde ein Teiler gefunden");
                    }
        if (i == 0)
            {
            System.out.println("Diese Zahl ist eine Primzahl");
            IstPrim = true;
            }
          else
            {
            IstPrim = false;
            System.out.println("Diese Zahl ist keine Primzahl");
            }
        if (zahl == 2)
            {
            System.out.println("Entschuldigung, diese Zahl ist doch eine Primzahl");
            IstPrim = true;
            i = 0;
            }
          else
            {
            }
        System.out.println("Die Überprüfung wurde abgeschlossen");
    }
}
 
Die Konvention, nach der du deinen Code eingerückt hast, ist mir leider nicht bekannt - dadurch ist er für mich unleserlich.

Gewöhne dir eine am besten früh eine gängige Konvention an, dann können andere deinen Code leichter lesen und du findest solche Fehler automatisch. Konkret: Wenn du eine geschweifte Klammer öffnest, gehören alle folgenden Zeilen eine Ebene weiter eingerückt, bis die Klammer wieder geschlossen wird. Wenn du dich an diese Regel hältst und deinen Code entsprechend formatierst, wirst du ganz einfach von selbst sehen, wo da irgendwas fehlt 🙂

Ich glaube allerdings, dass bei der for-Schleife die schließende Block-Klammer fehlt.
 
Zuletzt bearbeitet:
Vielen Dank für den Hinweis!!! Funktioniert leider immer noch nicht. Hier jetzt der geänderte Quellcode:
Java:
public class Primzahltest {
    public static void main(String[] args ) 
        {
            int i, zahl, b;
            boolean IstPrim;
            zahl = Double.parseDouble(args[0]);
            IstPrim = true;
            half = zahl / 2;
            i = 0;
            if (zahl < 2) 
                {
                    i = i + 1;
                    IstPrim = false;
                }
              else 
                { 
                    i = i;
                }
            for (b = 2; b < half; b++) 
                {
                    if (zahl % b == 0);
                        {
                            i = i + 1;
                            System.out.println("Es wurde ein Teiler gefunden");
                        }
                }
            if (i == 0)
                {
                    System.out.println("Diese Zahl ist eine Primzahl");
                    IstPrim = true;
                }
              else
                {
                    IstPrim = false;
                    System.out.println("Diese Zahl ist keine Primzahl");
                }
            if (zahl == 2)
                {
                    System.out.println("Entschuldigung, diese Zahl ist doch eine Primzahl");
                    IstPrim = true;
                    i = 0;
                }
              else
                {
                }
            System.out.println("Die Überprüfung wurde abgeschlossen");
        }
    }
Hoffe habe jetzt irgendwelche gängigen Konventionen genutzt. 😳

Beim Erstellen des Bytecodes kommen leider immer noch folgende 3 errors: 🙁

Z:\Java\Programme\Primzahl>javac Primzahltest.java
Primzahltest.java:6: error: possible loss of precision
zahl = Double.parseDouble(args[0]);
^
required: int
found: double
Primzahltest.java:8: error: cannot find symbol
half = zahl / 2;
^
symbol: variable half
location: class Primzahltest
Primzahltest.java:19: error: cannot find symbol
for (b = 2; b < half; b++)
^
symbol: variable half
location: class Primzahltest
3 errors
 
"zahl" ist bei dir vom Typ "int", d.h. eine ganze Zahl ohne Nachkommastelle. Du benutzt zum Einlesen aber parseDouble, was eine Zahl mit Nachkommastelle zurückgeben kann. Der Compiler beschwert sich, dass du dadurch an Präzision verlierst (weil du durch die Zuweisung den Nachkommateil verlierst). Du musst also entweder deinen Datentyp ändern oder nicht parseDouble, sondern etwas anderes benutzen.

In Zeile 8 führst du eine Zuweisung an eine Variable namens "half" durch, die du nicht deklariert hast. In Java muss man jede Variable deklarieren, damit der Compiler weiß, welchen Datentyp sie hat. Eine Deklaration ist eine Anweisung wie bei dir in Zeilen 4 und 5.
 
Oh stimmt... :bloed: auf das fehlende Deklarieren hätte ich selbst kommen können 😉
Wodurch muss ich denn Double.parseDouble ersetzen, damit ich eine Ganzzahl (int) benutzen kann?
Trotzdem schon mal vielen Dank für den Hinweis auf das fehlende Deklarieren!!! :toll:
 
Ein if benötigt nicht unbedingt ein else - wenn der else-Block leer ist, kannst du auch einfach das ganze else-Konstrukt weglassen 🙂

Integer.parseInt könntest du verwenden.
 
Zuletzt bearbeitet:
Vielen Dank!!! in meinem Lehrbuch wurde bisher immer double.parseDouble verwendet, daher kannte ich Integer.parseInt noch nicht. Jetzt funzt alles 🙂 Aber eine letzte Frage hätte ich noch: Wie kann man ein Danke abgeben???
 
Jeder Beitrag ist in so einem Kasten, in dem rechts unten Elemente wie Zitieren und Danke sind - das Danke bezieht sich immer auf einen Beitrag und nur indirekt auf dessen Verfasser, daher wird das dort vergeben 🙂
 
hmmm dann ist mein Status wohl noch zu niedrig... :/ da hätte ich ihn jetzt auch erwartet, aber da gibt es leider nur zitieren, diesen Beitrag zitieren, direkt antworten,bei google, wikipedia, forum nach dem markierten Wort suchen 🙁 naja, Danke werden folgen, sobald möglich.
 
Ahhh Hilfe!!! wollte gerade die kompilierte Datei ausführen, da kam dann auch noch folgende Fehlermeldung:

Z:\Java\Programme\Primzahl>java Primzahltest
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Primzahltest.main(Primzahltest.java:6)


Hier jetzt noch mal die entgültige Version von meinem Primzahltest:

Java:
public class Primzahltest {
    public static void main(String[] args ) 
        {
            int i, b, half, zahl;
            boolean IstPrim;
            zahl = Integer.parseInt(args[0]);
            IstPrim = true;
            half = zahl / 2;
            i = 0;
            if (zahl < 2) 
                {
                    i = i + 1;
                    IstPrim = false;
                }
              
            for (b = 2; b < half; b++) 
                {
                    if (zahl % b == 0);
                        {
                            i = i + 1;
                            System.out.println("Es wurde ein Teiler gefunden");
                        }
                }
            if (i == 0)
                {
                    System.out.println("Diese Zahl ist eine Primzahl");
                    IstPrim = true;
                }
              else
                {
                    IstPrim = false;
                    System.out.println("Diese Zahl ist keine Primzahl");
                }
            if (zahl == 2)
                {
                    System.out.println("Entschuldigung, diese Zahl ist doch eine Primzahl");
                    IstPrim = true;
                    i = 0;
                }
            System.out.println("Die Überprüfung wurde abgeschlossen");
        }
    }

Was habe ich denn jetzt schon wieder übersehen?
 
Du liest die zu untersuchende Zahl von args[0], das ist das, was hinter dem Namen des Programms beim Aufruf steht. Du rufst das Programm so auf: java Primzahltest

Dadurch ist args aber leer, weil du hinter dem Namen des Programms nichts mehr geschrieben hast. Versuch's mal so:

java Primzahltest 23
 
Zuletzt bearbeitet:

Zurück
Oben