Wieso wird "else" rot unterstrichen?

2 Antworten

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 

Woher ich das weiß:Berufserfahrung – Software-Entwicklung

Du hast einen Strichpunkt in deiner if bedingung.


snipesss 
Beitragsersteller
 28.07.2016, 16:10

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

daCypher  28.07.2016, 16:19
@snipesss

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.

PeterKremsner  28.07.2016, 16:20
@snipesss

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.

Myrmiron  28.07.2016, 16:10

Das hier.

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

PeterKremsner  28.07.2016, 16:13
@Myrmiron

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...

daCypher  28.07.2016, 16:21
@snipesss

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.

daCypher  28.07.2016, 16:25
@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!");
        }
    }  
}
heilwigkenner  28.07.2016, 18:17
@daCypher

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!");
}
}
}
PeterKremsner  28.07.2016, 18:48
@heilwigkenner

Geschmackssache...

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