# If Verschachtelung Frage



## Keshan (15. Dez 2011)

Hallo,

ich bin mit dem kleinen programm fast fertig und hab nur eine frage.
ich bin schon stundenlang dran gesessen, leider komme ich nicht weiter.

Aufgabe ist es eine if verschachtelung zu erstellen.

Im Folgenden Programmausschnitt befindet sich ein Fehler. Leider finde ich den nicht.



> public void suggestActivity() {
> 
> if (temperature >= 0 && precipitation == true){
> if (temperature > 0 && temperature <= 19 && precipitation == false){
> ...



Ich arbeite mit Eclipse. Das Tool gibt leider nur die letzte Zeile an und durchläuft nicht wie gewünscht die Fallunterscheidung. Sobald ich if/else-if benutze, klappt alles einwandfrei.
Kann mir jemand bitte sagen was ich bei dieser verschachtelung falsch mache, so dass nur das letzte system.out.println ausgegeben wird.

Ich bedanke mich im vorraus.


----------



## Final_Striker (15. Dez 2011)

Schon mal überlegt, dass einfach die Bedingungen nicht stimmen?

Wahrscheinlich solltest du 
	
	
	
	





```
if(...) ... else if(...)...
```
 benutzen, anstatt dem was du da gebaut hast.


----------



## Keshan (15. Dez 2011)

Wenn das so wäre, dann würde es ja mit if/else-if auch nicht gehen oder ?


----------



## Final_Striker (15. Dez 2011)

Bei dir wird das 2 
	
	
	
	





```
if
```
niemals 
	
	
	
	





```
true
```
sein, da das 
	
	
	
	





```
precipitation
```
im ersten if 
	
	
	
	





```
true
```
sein muss und im zweiten 
	
	
	
	





```
false
```
.


----------



## Kiri (15. Dez 2011)

So kann man es auch lesen:

```
public void suggestActivity() 
{
    if (temperature >= 0 && precipitation == true)
    {
        if (temperature > 0 && temperature <= 19 && precipitation == false)
        {
            if (temperature >= 20 && precipitation == false)
            {
                if (temperature < 0 && precipitation == true)
                {
                    if (temperature < 0 && precipitation == false)
                    {
                        System.out.println("Sauwetter");
                    }
                }else
                    System.out.println("Gehen wir spazieren ?");
            }else
                System.out.println("Gehen wir schwimmen ?");
        }else
            System.out.println("Komm, gehn wir Schlittenfahren");
    }else
        System.out.println("Lass uns am Lagerfeuer Glühwein trinken");
}
```

Wenn die erste If-Bedingung richtig wäre, kann die zweite If-Bedingung nicht richtig sein. Eventuell vertauscht du die If, Else Zweige.


----------



## Kiri (15. Dez 2011)

Vielleicht meinst du eher sowas:


```
public void suggestActivity() 
{
    if (temperature >= 0 && precipitation == true)
    {
        System.out.println("Gehen wir spazieren ?");
    }else if (temperature > 0 && temperature <= 19 && precipitation == false)
        {
            System.out.println("Gehen wir schwimmen ?");
        }else if (temperature >= 20 && precipitation == false)
            {...
```


----------



## Keshan (15. Dez 2011)

Final_Striker hat gesagt.:


> Schon mal überlegt, dass einfach die Bedingungen nicht stimmen?
> 
> Wahrscheinlich solltest du
> 
> ...



@ Kiris erster Beitrag:
danke, das hab ich auch schon probiert, dass bringt nur leider 4 mal die letzte Zeile zur Ausgabe. Das sollte ja so nicht sein.

@ Kiris zweiten Beitrag:
Das ist die zweite Aufgabe, die ich bereits hab und die klappt ja.
nur mit reinem if und dangling else klappt leider nicht.


----------



## hitman20101 (17. Dez 2011)

Jetzt hab ich mal ne Frage dazu:


Woher weiß das " Programm" welches if sich auf welches else sich bezieht ???? ???:L


----------



## Fab1 (17. Dez 2011)

hitman20101 hat gesagt.:


> Jetzt hab ich mal ne Frage dazu:
> 
> 
> Woher weiß das " Programm" welches if auf welches else sich bezieht ????



Selbst, sieht man es in der Regel sehr gut durch die Einrückung von links. Aber ansonsten muss man sich einfach mal die Klammern {} anschauen und dort halt überprüfen, wann welche geschlossen wird.

Eclipse hat noch die Funktion, wenn man den Cursor hinter eine Klammer setzt, dass Eclipse anzeigt, wo der Block eröffnet wurde. Damit kann man es noch etwas leichter erschließen.


----------



## Gast2 (17. Dez 2011)

Die Struktur ist immer fest:

```
if (Expression) Statement else Statement
```
Die Statements an sich können wiederum fast alles enthalten, auch Codeblöcke, { ... }. Ein if-elseif ist nur ein weiteres if statement im Statement Block des else Teils. So gibts immer ne feste zuordnung welches else zu welchem if gehört.


----------

