3

簡単な質問です。プログラムに次のコードがあります。

input = JOptionPane.showInputDialog("Enter any word below")
int i = 0;  
for (int j = 0; j <= input.length(); j++)  
{
    System.out.print(input.charAt(i));  
    System.out.print(" "); //don't ask about this.  
    i++;
}   
  • ユーザー入力である入力
  • i見られるように、値が0の整数です

コードを実行すると、次のエラーが発生します。

スレッド「メイン」での例外 java.lang.StringIndexOutOfBoundsException: 範囲外の文字列インデックス: 6
at java.lang.String.charAt(Unknown Source)
at program.main(program.java:15)

charAt intを ではなく 0に変更するとi、エラーは発生しません...
どうすればよいですか? 何が問題ですか?

4

7 に答える 7

8

交換:

j <= input.length()

... と ...

j < input.length()

JavaString文字のインデックスは 0 ベースであるため、ループ終了条件はinputの長さ - 1 である必要があります。

現在、ループが終了前に最後から 2 番目の反復に到達すると、の長さにinput等しいインデックスで文字を参照し、 (a )inputをスローします。StringIndexOutOfBoundsExceptionRuntimeException

于 2014-03-24T13:48:53.033 に答える
3

Java での文字列のインデックス付けは (他の配列のような構造と同様に)ゼロから始まります。これは、それinput.charAt(0)が一番左の文字であることを意味します。最後の文字はinput.charAt(input.length() - 1)です。

forしたがって、ループ内で参照している要素が多すぎます。に置き換え<=<修正します。代替手段 ( <= input.length() - 1) は、コードを C++ (符号なしの型を持つ) に移植する場合、あなたを苦しめる可能性があります。

ところで、Java ランタイムは非常に役立つ例外とエラー メッセージを出力します。それらを読んで理解することを学びましょう。

于 2014-03-24T13:50:52.723 に答える
2

Java の文字列はゼロベースのインデックスに従うため、for ループ条件j <= input.length()をに置き換えます。j < input.length()たとえば、文字列のインデックスは"india"0 から 4 まで始まります。

于 2014-03-24T14:06:05.820 に答える
0
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}
于 2014-03-24T13:51:25.993 に答える
0

[0-length] から配列にアクセスしていました。[0-(length-1)] からアクセスする必要があります。

int i = 0;
for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(i));
    System.out.print(" "); //don't ask about this.
    i++;
}
于 2014-03-24T13:48:45.550 に答える