2016-07-16 19 views
-6

Dies ist die for Version der Schleife:For-Schleife funktioniert nicht, aber die While-Schleife funktioniert, warum?

private String tailOfWord(String nextToken) { 
    int posWov = firstVowel(nextToken); 
    String result = ""; 
    int checker = nextToken.length(); 
    for (int i = posWov; i <= checker; i++) { 
     result += nextToken.charAt(i); 
    } 
    return result; 
} 

Dies ist die while Version der Schleife:

private String tailOfWord(String nextToken) { 
     int posWov = firstVowel(nextToken); 
     String result = ""; 
     int checker = nextToken.length(); 
     int i = posWov; 
     while (i < checker) { 
      result += nextToken.charAt(i); 
      i++; 
     } 
     return result; 
    } 

Wenn ich es mit, während es perfekt funktioniert, aber wenn ich es mit für , es gibt mir diese Fehler:

Exception in thread "Thread-3" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
    at java.lang.String.charAt(Unknown Source) 
    at acrotry.tailOfWord(acrotry.java:73) 
    at acrotry.transform(acrotry.java:52) 
    at acrotry.pigLatin(acrotry.java:20) 
    at acrotry.run(acrotry.java:11) 
    at acm.program.Program.runHook(Program.java:1568) 
    at acm.program.Program.startRun(Program.java:1557) 
    at acm.program.AppletStarter.run(Program.java:1895) 
    at java.lang.Thread.run(Unknown Source) 
+3

Weil 'i <= checker' nicht' i

+1

Der '<=' Vergleichsoperator bewirkt, dass die Schleife zu oft auftritt und der 'charAt'-Aufruf versucht, ein Element zu erhalten, das außerhalb der Grenzen von String nextToken liegt. – crm

Antwort

1

im for Schleife Sie verwenden einen <= Operator statt <:

for (int i = posWov; i < checker; i++) { 
    // Fixed here------^ 
    result += nextToken.charAt(i); 
} 
0

Es wird jetzt arbeiten ... Es wurde Array Index Ausnahme geben, da Sie ein zusätzliches Element zuzugreifen versuchen die

nicht verfügbar ist
private String tailOfWord(String nextToken) { 
    int posWov = firstVowel(nextToken); 
    String result = ""; 
    int checker = nextToken.length(); 
    for (int i = posWov; i < checker; i++) { 
     result += nextToken.charAt(i); 
    } 
    return result; 
} 
1

Es ist ein Fehler in wie Ihre For-Schleife funktioniert. Schauen Sie sich auf dieser Linie:

for (int i = posWov; i <= checker; i++) 

Sie schrieb i <= checker statt i < checker. Aus diesem Grund versucht die for-Schleife, ein Zeichen aus einem nicht vorhandenen Teil von nextToken bei der letzten Iteration zu erhalten, so dass eine StringIndexOutOfBoundsException auftauchen.

Als Mureinik und Elliott Frisch erwähnt, alles, was Sie tun müssen, ist <= mit < zu ersetzen. Nun sollte die For-Schleife wie folgt aussehen:

Verwandte Themen