exception in thread main java.lang.StringIndexOutOfBoundsException: String index out of range: 6
so, ich bin versucht, wright, ein Programm zu Drucken, ein Wort mit allen vokalen ersetzt mit $.
in java.
ich bekomme immer diese Fehler exception in thread main java.lang.StringIndexOutOfBoundsException: String index out of range: 6
wenn ich es laufen lasse, kompiliert er fein.
hier ist der code.
import java.util.*;
public class SummerFour
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int cnt = 0;
String word;
String output = "";
char letter = 'x';
System.out.print("enter word to test: ");
word = keyboard.nextLine();
do {
cnt++;
letter = word.charAt(cnt - 1);
if (letter == 'a' || letter == 'i' || letter == 'e' || letter == 'u' || letter == 'o')
{
letter = '$';
}
}
while (cnt <= word.length());
System.out.println(word);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre do...while-Schleife ist eine off-by-one-Fehler. Sie überprüfen, um zu sehen, ob
cnt
ist weniger als oder gleich der Größe der Zeichenfolge, dann erhöht es die von ein und nehmen Sie den Wert - 1, die als index fürString.charAt()
. Dies ist problematisch, denn Strings sind indiziert, beginnend bei 0, so dass am Ende einer Zeichenfolge, wirst du immer gehen zu weit.Denken Sie über dieses Beispiel:
tacos
Dies ist ein fünf-Buchstaben-Wort. Wenn
cnt = 5
sind, gehen Sie zurück durch die Schleife ein weiteres mal (seit 5 kleiner oder gleich 5) und die Schrittweitecnt
6. Dann rufen SieString.charAt()
mit einem Wert von 5 (6 -1), aber die Auswahl dertacos
ist nur 0-4 (0 = t, 1 = a, 2 = c, 3 = a, 4 = s) und damit 5 ist außerhalb des Bereichs. Sie können Ihr do...while-Schleife funktioniert und weniger verwirrend von etwas wie dies:Natürlich den code noch nicht das tut, was Sie möchten, aber Sie nicht mehr den ursprünglichen Fehler. Da dieses sieht wie es sein könnte, Hausaufgaben, werde ich Sie auch weiterhin, um durch Sie Arbeit.