# If / Else



## mst9000 (17. Apr 2012)

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:


```
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!");
		
}	
}
```


----------



## Andgalf (17. Apr 2012)

Du hast kein if ! Else ohne if ergibt keinen Sinn


----------



## mst9000 (17. Apr 2012)

Ou.. da habe ich den falschen Code kopiert: 

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


```
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!");
		
}	
}
```


----------



## nillehammer (17. Apr 2012)

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


----------



## mst9000 (17. Apr 2012)

Danke  nun funktionierts:


```
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!");
		
	}
}
```


----------



## nillehammer (17. Apr 2012)

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.


----------



## SlaterB (17. Apr 2012)

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 (17. Apr 2012)

mst9000 hat gesagt.:


> ```
> public class castOP {
> public static void main (String [] args) {
> 
> ...



Bei dir wird "gleich 20" ignoriert? 


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


----------



## Landei (17. Apr 2012)

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


```
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:


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


----------



## knucki (17. Apr 2012)

Tschuldigung :/


----------



## trez (20. Apr 2012)

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


----------



## Landei (20. Apr 2012)

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


----------



## knucki (20. Apr 2012)

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?


----------



## Andgalf (20. Apr 2012)

trez hat gesagt.:


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


----------



## Jango (24. Apr 2012)

trez hat gesagt.:


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



Sehe ich ähnlich.
Spätestens bei nem 2-Zeiler muss man eh ne Klammer setzen, also kann man das auch gleich.
Vieles wird später eingefügt und da hat man dann die Klammern schon....


----------

