-8
int i=0;    
while(!a.isEmpty()) {         
    if(a.toCharArray()[i]==' ') { 
        System.out.println(a.toCharArray()[i]);         
    }         
    i++;     
}     

このプログラムを実行すると、エラーが発生します: 範囲外のインデックス。どうすれば解決できますか?

4

3 に答える 3

5

aループ内で変更していないため、変更されず、範囲外にa.isEmpty()なるまでループを続けます。iもしかして:

while (i < a.length()) {

余談ですが、(@MartijnCourteauxも指摘しているa.toCharArray()[i]ように)単にそうすることができます(そしてすべきです)。a.charAt(i)

于 2013-08-10T00:55:56.240 に答える
2

問題の解決策を提供するいくつかの回答が既にあります。この回答は、問題を自分でどのように発見できたかについてです。

ループ内の配列インデックス範囲外エラーのほとんどは、不適切なループ条件が原因であるため、インデックスがループの最後に到達した後でも条件が真であり続けます。ループ条件は に依存していなかったため、 からにi変更できる唯一の方法は、ループ内で変更された場合です。truefalsea

a変更が予想される場合はSystem.out.println(a)、ループ内に入れ、 の値を監視する必要がありaました。あなたはそれが変わらないのを見たでしょう。

または、isEmptyテストがタイプミスであり、 に依存するものをテストするつもりだった場合はi、ループ条件をチェックしているデスクでそれが見つかったはずです。

于 2013-08-10T01:15:25.657 に答える
0

代わりにループを次のように変更する必要があります。

char[] c=a.toCharArray();
for(i=0; i<c.length; i++){
于 2013-08-10T00:57:36.037 に答える