2016-05-19 5 views
0

Ich hatte dieses Programm, in dem ich von einem Ausdruck wie die beiden Zahlen und ein Symbol zu nehmen hatte:Warum geht das Steuerelement nicht in die if-Schleife, während nach Zeichen gesucht wird?

**111*369** 

Aber hier:

for(i=0; i<t; i++) { 
while(w) { 
    if(ar1[i].charAt(j)=='+' || ar1[i].charAt(j)=='-' || ar1[i].charAt(j)=='*' || ar1[i].charAt(j)=='/') { 
     w = false; 
    } 
    else { 
     k = ar1[i].charAt(j); 
     a = a*10 + (long)(k-48); 
    } 
}  

Das Programm geht nie in das Innere der if-Anweisung. Es kommt in eine Endlosschleife.

Warum also überprüft es nicht die Symbole?

Hier ist der Link für das komplette Programm mit dem Ausgang: My Program

Antwort

1

Ihre while-Schleife prüft immer den gleichen Charakter in dem Zustand, da man nie j erhöhen. Wenn dieses Zeichen kein Operator ist, wird die Schleife daher niemals beendet.

Sie sollten in jeder Iteration j erhöhen, und kümmern uns nicht j nach dem letzten Index ar1[i] zu erhöhen: bei Ihrer while Anweisung

while(w && j < ar1[i].length) { 
     if(ar1[i].charAt(j)=='+' || ar1[i].charAt(j)=='-' || ar1[i].charAt(j)=='*' || ar1[i].charAt(j)=='/') { 
      w=false; 
     } 
     else { 
      k=ar1[i].charAt(j); 
      a=a*10+ (long)(k-48); 
     } 
     j++; 
    } 
1

Look:

while (w) { 
    if (ar1[i].charAt(j) == '+' || ar1[i].charAt(j) == '-' || ar1[i].charAt(j) == '*' || ar1[i].charAt(j) == '/') { 
     w = false; 
    } else { 
     k = ar1[i].charAt(j); 
     a = a * 10 + (long)(k - 48); 
    } 
} 

Wenn die if Zustand Falsch, du gehst zum Block else. Der else Block ändert nichts w und tut nichts, um die Sachen zu ändern, die durch die if geprüft werden, also fährt die Schleife für immer fort.

Verwandte Themen