Frage von snipesss, 104

Wieso wird "else" rot unterstrichen?

import static java.lang.System.*;
import java.util.Scanner;

public class Autheniticator2 {

public static void main(String[] args){
    Scanner keyboard = new Scanner(System.in);
    
    out.println("Benutzername:");
    String Benutzername = keyboard.next();  
    
    out.println("Passwort:");
    String Passwort = keyboard.next();
    
    if(
            (Benutzername.equals("Stefan")) &&
            Passwort.equals("Lena"));
    {   
        out.println("Sie erhalten Zugang!");
}
    
    else{
        out.println("Sie erhalten keinen Zugang!");
    }
}
}
Antwort
von Willibergi, 41

Dein Fehler liegt hier:

if( (Benutzername.equals("Stefan)) && (Passwort.equals("Lena"));

{ ... }

Hinter der if-Bedingung setzt du ein Semikolon und beendest somit die if-Abfrage.

Die Anweisungen im Block nach dem if werden somit immer ausgeführt und das else wird als Syntaxfehler gewertet.

Hintergrund der ganzen Sache ist folgender:

In Java gilt der Befehl ";" als leerer Befehl - er ist also syntaktisch korrekt, tut aber rein gar nichts.

if-Abfragen funktionieren auch ohne geschweifte Klammern, wobei dann nur die erste Anweisung nach der Bedingung ausgeführt wird.

Die erste Anweisung nach dem if ist bei dir der leere Befehl.

Er wird ausgeführt, es passiert aber nichts und der Block nach der if-Abfrage wird als normaler Block gewertet, der nicht zur if-Abfrage gehört.

Das else ist somit ein einzelner Befehl und daher syntaktisch falsch. ;)

Entferne also das Semikolon nach der if-Bedingung, dann sollte alles funktionieren. ^^

Ich hoffe, ich konnte dir helfen; wenn du noch Fragen hast, kommentiere einfach. 

LG Willibergi 

Antwort
von PeterKremsner, 70

Du hast einen Strichpunkt in deiner if bedingung.

Kommentar von Myrmiron ,

Das hier.

Außerdem ist dein Stiel mehr als fragwürdig.

Kommentar von PeterKremsner ,

Ich glaube das komische Layout kommt vom Kopieren aus der IDE in Gutefrage.net.

Ich hoffe mal nicht dass er in der IDE die Klammern auch so eigenartig plaziert hat...

Kommentar von snipesss ,

Wieso sind die Klammern dumm gesetzt? :P

Kommentar von daCypher ,

Weil sie kreuz und quer im Raum stehen. Normalerweise macht man die Klammern so weit nach rechts, dass man zu jeder öffnenden Klammer weiß, welche schließende Klammer dazugehört und dadurch besser nachvollziehen kann, wo eine Bedingung oder Schleife anfängt, und wo sie aufhört.

Kommentar von daCypher ,

Also um es zu verdeutlichen: So würde es in "schön und strukturiert" aussehen:

import static java.lang.System.*;
import java.util.Scanner;

public class Autheniticator2 
{

    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);

        out.println("Benutzername:");
        String Benutzername = keyboard.next();  

        out.println("Passwort:");
        String Passwort = keyboard.next();

        if (Benutzername.equals("Stefan") && Passwort.equals("Lena"))
        {   
            out.println("Sie erhalten Zugang!");
        }
        else
        {
            out.println("Sie erhalten keinen Zugang!");
        }
    }  
}
Kommentar von heilwigkenner ,

Lieber so :-)

public class Autheniticator2 {

public static void main(String[] args){
Scanner keyboard = new Scanner(System.in);

out.println("Benutzername:");
String Benutzername = keyboard.next();

out.println("Passwort:");
String Passwort = keyboard.next();

if (Benutzername.equals("Stefan") && Passwort.equals("Lena")) {
out.println("Sie erhalten Zugang!");
}
else {
out.println("Sie erhalten keinen Zugang!");
}
}
}
Kommentar von PeterKremsner ,

Geschmackssache...

Ich persönlich bevorzuge die Formattierung von daCypher, die kommt mir im Endeffekt gerade bei viel Code auf einem Haufen übersichtlicher vor.

Kommentar von snipesss ,

Danke, habs jetzt. Aber wieso macht es jetzt einen Unterschied ob ich einen Strichpunkt in meiner if-Bedingung habe oder nicht?

Kommentar von daCypher ,

Der Strichpunkt ist ja nicht mal in der Bedingung, sondern nach der Bedingung. Dadurch ist das if als Anweisung fertig (also die Bedingung wird geprüft, aber danach wird keine Anweisung ausgeführt) und das was darunter in der geschweiften Klammer steht, gehört nicht mehr zum if. Dadurch kann der Compiler mit dem else nichts mehr anfangen.

Wenn der Strichpunkt da weg ist, gehört das in den geschweiften Klammern zum if und das else macht wieder einen Sinn.

Kommentar von PeterKremsner ,

Weils einfach von der Syntax falsch ist.....

Du hast im Prinzip stehen:

if(Bedingung);

else

nach dem Semikolon ist aber der Block abgeschlossen, das bedeutet die if Anweisung hat keinen Effekt und gilt nach dem Semikolon nicht mehr.

Das bewirkt dass im Code plötzlich eine else Anweisung ohne zugeordnete if Anweisung steht und das ist ein Syntaxfehler.

Antwort
von Pascal25565, 25

Du hast die Klammern ganz schön vergewaltigt xDDD

Kommentar von snipesss ,

ich weiß xD

Keine passende Antwort gefunden?

Fragen Sie die Community