If / Else

mst9000

Mitglied
Hallo Zusammen

Ich bin neu in diesem Forum und versuche gerade Java zu üben. Ich versuche gerade eine IF / Else Anweisung zu schreiben.
Eclipse meldet mir jedoch das Else falsch sei. Könnte sich vielleich jemand kurz den Code anschauen?
Wahrscheinlich ein ganz banaler fehler... :bahnhof:
Besten Dank für ein Feedback

Code:

Java:
public class castOP {
public static void main (String [] args) {
	
	double z;
	int x = 2, y  = 3;
			z=x/y;
		  
			(z>20);
			System.out.println("die Zahl ist grösser als 20!");
}

else {
			System.out.println("die Zahl ist kleiner als 20!");
		
}	
}
 

mst9000

Mitglied
Ou.. da habe ich den falschen Code kopiert:

Das if hätte ich schon im Code, funktioniert jedoch trotzdem nicht..

Java:
public class castOP {
public static void main (String [] args) {
	
	double z;
	int x = 2, y  = 3;
			z=x/y;
		  
	if(z>20);
			System.out.println("die Zahl ist grösser als 20!");
}

else {
			System.out.println("die Zahl ist kleiner als 20!");
		
}	
}
 
N

nillehammer

Gast
Kontrollier mal die Klammersetzung "{}" und das ";" direkt nach dem if ist sicher auch nicht so gewollt.
 

mst9000

Mitglied
Danke :) nun funktionierts:

Java:
public class castOP {
public static void main (String [] args) {
	
	double z;
	int x = 2, y  = 3;
			z=x/y;
		  
	if(z>20)
			System.out.println("die Zahl ist grösser als 20!");

else 
			System.out.println("die Zahl ist kleiner als 20!");
		
	}
}
 
N

nillehammer

Gast
Dein Code enthält auch einen kleinen logischen Fehler. Der else-Zweig wird auch ausgeführt, wenn (z==20). Die auf der Konsole ausgegebene Aussage "die Zahl ist kleiner als 20!" stimmt dann natürlich nicht. Also entweder Text anpassen oder Bedingung in (z>=20) ändern. Mag für Deine Übung jetzt egal sein. Aber tatsächlich sind solche Grenzwertprobleme eine beliebte Quelle für Bugs in "richtigen" Programmen.
 
S

SlaterB

Gast
kannst du nicht allein die Klammern zählen bzw. das sieht man rein optisch schon Unterschiede,
ein Semikolon in derselben Zeile wie in if ist auch quasi immer ein Fehler
(edit: oh, alle Posts in der Zwischenzeit übersehen, nicht aktualisiert ;) )
 

knucki

Aktives Mitglied
Java:
public class castOP {
public static void main (String [] args) {
	
	double z;
	int x = 2, y  = 3;
        z=x/y;
		  
        if((z>20))
			System.out.println("die Zahl ist grösser als 20!");
        else 
			System.out.println("die Zahl ist kleiner als 20!");
		
	}
}

Bei dir wird "gleich 20" ignoriert? :)

Java:
    System.out.println("Die Zahl ist " + ((z == 20) ? "gleich" : ((z > 20) ? "grösser als" : "kleiner als")) + " 20!");
nicht getestet :=
 

Landei

Top Contributor
Da kann man gleich das Hintereinanderschalten von Bedingungen ("if-else-Kaskaden") zeigen:

Java:
        if(z>20)
            System.out.println("die Zahl ist grösser als 20!");
        else if(z < 20)
            System.out.println("die Zahl ist kleiner als 20!");
        else
            System.out.println("die Zahl ist gleich 20!");

Viele Java-Programmierer bevorzugen geschweifte Klammern um die einzelnen Zweige, auch bei einzelnen Anweisungen (obwohl es darüber Diskussionen gibt, und Bücher wie "Clean Code" gegen die Klammern argumentieren). Am häufigsten wird dir dieser Stil (der auch den Java-Konventionen von Oracle entspricht) begegnen:

Java:
        if(z>20) {
            System.out.println("die Zahl ist grösser als 20!");
        } else if(z < 20) {
            System.out.println("die Zahl ist kleiner als 20!");
        } else {
            System.out.println("die Zahl ist gleich 20!");
        }


knuckis Code tut dasselbe, aber obwohl ich [c]?:[/c] Fan bin, wird das etwas zu unübersichtich.

Klassennamen übrigens mit großen Anfangsbuchstaben schreiben.
 
T

trez

Gast
?: sollte IMHO verboten werden, da unübersichtlich und nahezu nicht wart- bzw. erweiterbar ...
 

Landei

Top Contributor
Code:
?:
liefert im Gegensatz zu [c]if[/c] einen Wert zurück, wodurch es oft sehr flexibel einzusetzen ist und Code-Duplikation vermeiden kann.
 

knucki

Aktives Mitglied
trez, ich denke, da kommt es ganz auf das Ergebnis an, dass man aus dem If erhalten möchte. In diesem Fall, wird ein konkreter Text zusammengebaut, der genau 3 verschiedene Zustände beschreiben kann(größer, kleiner und gleich).

Erklär du mir mal sachlich, warum das genau hier verboten werden sollte?
 
A

Andgalf

Gast
?: sollte IMHO verboten werden, da unübersichtlich und nahezu nicht wart- bzw. erweiterbar ...

Also ich bin bekennender CleanCode verfechter aber was genau soll hier denn unübersichtlich sein?

Wenn man das natürlich noch verschachtelt oder als parameter im Methodenaufruf verwendet wird es unübersichtlich, aber das ist vermeidbar.

Und wie meine Vorredner schon gesagt haben gibt es gute Argumente für den Ternären Operator.
 

Neue Themen


Oben