int i=0;
while(!a.isEmpty()) {
if(a.toCharArray()[i]==' ') {
System.out.println(a.toCharArray()[i]);
}
i++;
}
このプログラムを実行すると、エラーが発生します: 範囲外のインデックス。どうすれば解決できますか?
int i=0;
while(!a.isEmpty()) {
if(a.toCharArray()[i]==' ') {
System.out.println(a.toCharArray()[i]);
}
i++;
}
このプログラムを実行すると、エラーが発生します: 範囲外のインデックス。どうすれば解決できますか?
a
ループ内で変更していないため、変更されず、範囲外にa.isEmpty()
なるまでループを続けます。i
もしかして:
while (i < a.length()) {
余談ですが、(@MartijnCourteauxも指摘しているa.toCharArray()[i]
ように)単にそうすることができます(そしてすべきです)。a.charAt(i)
問題の解決策を提供するいくつかの回答が既にあります。この回答は、問題を自分でどのように発見できたかについてです。
ループ内の配列インデックス範囲外エラーのほとんどは、不適切なループ条件が原因であるため、インデックスがループの最後に到達した後でも条件が真であり続けます。ループ条件は に依存していなかったため、 からにi
変更できる唯一の方法は、ループ内で変更された場合です。true
false
a
a
変更が予想される場合はSystem.out.println(a)
、ループ内に入れ、 の値を監視する必要がありa
ました。あなたはそれが変わらないのを見たでしょう。
または、isEmpty
テストがタイプミスであり、 に依存するものをテストするつもりだった場合はi
、ループ条件をチェックしているデスクでそれが見つかったはずです。
代わりにループを次のように変更する必要があります。
char[] c=a.toCharArray();
for(i=0; i<c.length; i++){