Eclipse Java Brauche Hilfe bei Code

...komplette Frage anzeigen

3 Antworten

Du hättest alles nochmal einrücken sollen, damit der Code leserlicher ist bei GF.

Aber dein Problem sind die Semikolons. Also, die, die hinter dem if(...) stehen.

Nebenbei ist dein Code grauenvoll formatiert, wenn man sich da etwas besseren Stil angewöhnt ist so ein Fehler leichter zu finden (funktioniert bei Eclipse automatisch wenn du STRG+SHIFT+F drückst, geht aber nur bei korrektem Code)

public static void main(String[] args) {

    Scanner sc1 = new Scanner(System.in);

    System.out.println("P ");
    String aaaaaa = sc1.next();

    if (aaaaaa.equals("R")) {
        System.out.println("Z");
        Scanner sc2 = new Scanner(System.in);
        System.out.println("P ");
        String p = sc2.next();

        if (p.equals("B")) {
            System.out.println("Z");
            Scanner sc3 = new Scanner(System.in);
            System.out.println("Pa");
            String pa = sc3.next();

            if (pa.equals("Pi")) {
                System.out.println("Z");
                System.out.println("S");
                Scanner sc4 = new Scanner(System.in);
                System.out.println("C ");
                String c = sc4.next();

                if (c.equals("s")) {
                    System.out.println("D");
                    System.out.println("Pr");
                    Scanner sc5 = new Scanner(System.in);
                    System.out.println("C ");
                    String co = sc5.next();

                    if (co.equals("o")) {
                        System.out.println("P");
                        System.out.println("I");
                    }

                    else {
                        System.out.println("U");
                    }
                } else {
                    System.out.println("U");
                }
            } else {
                System.out.println("Z");
            }

        }
        // zweite Sicherheitsstufe
        else {
            System.out.println("Z");
        }

    } else {
        System.out.println("Zu");
    }
}
reddox86 03.08.2013, 13:59

Gut..so schlecht war es jetzt nicht formatiert, mich hat nur die else formattierung gestört und die Tatsache, dass nach einem Semikolon keine neue Zeile angefangen wurde.

Um den Fehler etwas detaillierter zu erklären muss ich etwas weiter ausholen.

Erstmal solltest du wissen: Ein Statement ist ein Befehl mit Semikolon abgeschlossen oder beliebig viele Statements, die mit geschweiften Klammern eingeschlossen werden (es gibt noch mehr statements, zB if-else ist auch ein Statement)

Nun ist if-else wie folgt definiert:

if (Bedingung) Statement else Statement

Was in deinem Code aber steht ist

if (Bedingung) ; Statement else Statement

Und da das Semikolon schon ein Statement ist (ein leerer Befehl mit Semikolon) kann man das umformulieren auf

if (Bedingung) Statement Statement else Statement

Was dann falsch ist und nciht interpretiert werden kann.

Schlimmer ist das Problem noch, wenn du kein else hast, weil dann hast du einen Programmfehler der syntaktisch korrekt ist sich aber falsch verhält.

Weil if ist wie folgt definiert

if (Bedingung) Statement

Wenn du jetzt schreibst

if (Bedingung) ; Statement

führst du einen leeren Befehl aus (oder auch nciht, je nachdem ob die Bedingung erfüllt ist). Und dann das Statement, unabhängig davon was im if stand. Syntaktisch ist das korrekt (weil ja das alles von geschweiften Klammern umgeben ist, da können also beliebig viele Statements rein) - aber es verhält sich dann nciht so, wie du willst.

Ich hoffe das war jetzt nicht zu verwirrend und hat das Problem etwas deutlicher gemacht.

0

Wenn du folgenden Stil verwenden würdest:

if(...)
{
    if(...)
    {
        ...
    }
    else
    {
        ...
    }
}

dann würdest du dich viel besser in deinem Code zurechtfinden. Denn so vergisst man praktisch nie eine Klammer und weiß außerdem auf einen Blick, zu welchem if ein else gehört.

if (aaaaaa.equals("R"));
weg mit dem Semikolon (;) beim if

Was möchtest Du wissen?