# if else Anweisung macht nicht was es soll. Wieso?



## jaykop (19. Dez 2012)

Hallo,

wäre nett wenn mir einer zu dem unteren Code sagen könnte was ich da falsch gemacht habe.
Der Compiler ignoriert irgend wie die letzte else if(..) Anweisung. Ein Fehler beim Compilieren wird auch nicht ausgespuckt.

gruß
jaykop




```
// Zeichen konkatinieren    
        String zusammenFassung = "";
        for (int i = 0; i < a.length(); i++) {

            int StringLaenge = a.length() - 1;
            char zeichen = a.charAt(i);

            if (zeichen != ',') {
                String tmp = String.valueOf(zeichen);
                zusammenFassung = zusammenFassung + tmp;

            } else if (zeichen == ',') {
                System.out.println("ZusmmenFassung: " + zusammenFassung);
                zusammenFassung = "";
            
// hier kommt man garnicht an. Sollte aber gehen ?
            } else if (i == StringLaenge) {
                System.out.println("ZusmmenFassung: " + zusammenFassung);
            }


        }
```


----------



## Clayn (19. Dez 2012)

Er kommt nicht hin, da eine der beiden vorherigen Bedinungen erfüllt wird.
Entwerder ist zeichen!=',' oder ==',' und somit wird er nie die letzte if Prüfung machen.

Wenn du am Ende der Schleife einfach nur den Text ausgeben lassen willst, machs einfach direkt hinter der Schleife ohne if.

MFG
Clayn


----------



## nillehammer (19. Dez 2012)

```
if (zeichen != ',') {
                String tmp = String.valueOf(zeichen);
                zusammenFassung = zusammenFassung + tmp;
 
            } else if (zeichen == ',') {
                System.out.println("ZusmmenFassung: " + zusammenFassung);
                zusammenFassung = "";
```
Da Zeichen entweder ',' ist oder eben nicht, wird immer einer der ersten beiden Zweige betreten und nie der Dritte. Das ist ein logischer Fehler in Deinem Programm und kein Compiler-Fehler. Baue entweder die Bedingungen um oder mache statt dem  zweiten else-if ein schlichtes neues if.


----------



## jaykop (19. Dez 2012)

Danke für die Antwort ergibt sinn.

Mein Ziel ist es mit der Schleife nur die Zahlen ohne das komma auszulesen. Die Eingabe eines Strings "12,34,56,7" sollte dann sein.
12
34
56
7 

Deswegen die if abfragen.


----------



## jaykop (19. Dez 2012)

nillehammer hat gesagt.:


> Baue entweder die Bedingungen um oder mache statt dem  zweiten else-if ein schlichtes neues if.



Mit einem seperaten if hatte es funktioniert nur konnte ich mir seit eben nicht erklären warum.


----------



## jaykop (19. Dez 2012)

Ich hätte da noch eine Frage. Wieso kommt der jetzt nicht in die zweite else if. Ich habe jetzt die letzten else if() rheienfolge geändert um zu schauen was passiert. Ich dachte ich habe es verstanden ;(

gruß
jaykop


```
// Zeichen konkatinieren    
        String zusammenFassung = "";
        for (int i = 0; i < a.length(); i++) {

            int StringLaenge = a.length() - 1;
            char zeichen = a.charAt(i);

            if (zeichen != ',') {
                String tmp = String.valueOf(zeichen);
                zusammenFassung = zusammenFassung + tmp;

// Wenn i und StringLaenge die gleichen Werte habe wird nicht die innere Anweisung ausgeführt sondern es springt zum Schleifen Kopf.
            } else if (i==StringLaenge) { 
                System.out.println("ZusmmenFassung: " + zusammenFassung);
                

            } else if (zeichen == ',') {
                System.out.println("ZusmmenFassung: " + zusammenFassung);
                zusammenFassung = "";
            }


        }
```


----------



## pl4gu33 (19. Dez 2012)

Wahrscheinlich wird er immer direkt einfach in die das IF gehen. Mach doch mal ein System.out.println(..) rein, dann siehst du, dass der dort wahrscheinlich immer rein geht und damit schaut er sich das else if gar nicht mehr an. Da das "letzte" Zeichen kein ',' is


----------



## jaykop (19. Dez 2012)

Ja. Wie es aussieht geht der beim letzten Zeichen in das if(..) rein und schaut sich die anderen else if(..) garnicht an. Wie es aussieht gibt es keine andere Lösung als den letzten Zeichen des Strings Spezial zu behandeln mit einer seperaten if abfrage.

gruß
jaykop


----------



## pl4gu33 (19. Dez 2012)

du kannst die Bedingungen auch einfach tauschen 


```
if (i==StringLaenge) {
               
 

            } else if (zeichen != ',') { 
              
                
 
            } else if (zeichen == ',') {
                
            }
```


----------



## Phash (19. Dez 2012)

pl4gu33 hat gesagt.:


> du kannst die Bedingungen auch einfach tauschen
> 
> 
> ```
> ...



da reicht dann aber ein else nach dem ersten else if
entweder ist es oder es ist nicht != ','


----------



## tröööt (20. Dez 2012)

vielleicht wäre es ja auch mal damit getan wenn man "else if" richtig blocken und einrücken würde um die logikfehler aufzuzeigen


```
if()
{
	//...
}
else
{
	if()
	{
		//...
	}
	else
	{
		if()
		{
			//...
		}
		else
		{
			if()
			{
				//...
			}
			else
			{
				//...
			}
		}
	}
}
```


----------

