2

プログラムはコンパイルされますが、次のエラーが発生します。

スレッド「メイン」での2
つの 1 つの
3 つの例外 java.lang.ArrayIndexOutOfBoundsException: testingN.printArray(testingN.java:19) で3


私はJava(およびプログラミング)が初めてで、これにこだわっています。

public class testingN 
{
    public static void main(String[] args) 
    {
        String[] names = new String[3];
        names[0] = "Two";
        names[1] = "One";
        names[2] = "Three";
        printArray(names);
    }
    public static String printArray(String[] data) 
    {
        int i;
        for (i = 0; i < data.length; i++) 
        {
          System.out.println(data[i]);
        }
        return data[i];
    }
}
4

2 に答える 2

2

それはforループの仕組みによるものです。

for (*initialization*; *some boolean condition*; *action to perform each loop*) {
    //...
}

for ループは次のように機能します。

  1. まず、初期化セクションでコードを実行します。あなたの場合、それは設定しますi = 0
  2. ループの内容を実行します
  3. アクションを実行します。あなたの場合i++
  4. ブール条件をチェックします。true の場合、ステップ 2 に進みます。そうでない場合は、ループを終了します。あなたの場合、状態はi < data.length.

ステップ 3 は条件がチェックされる前に発生するため、i値は配列サイズ -1 よりも 1 大きくなります。つまり、配列の最後のインデックスよりもちょうど 1 大きいインデックスになります。したがってreturn data[i];、範囲外の例外が発生します。

于 2013-10-28T18:33:05.243 に答える
0
public class testingN 
{
    public static void main(String[] args) 
    {
        String[] names = new String[3];
        names[0] = "Two";
        names[1] = "One";
        names[2] = "Three";
        printArray(names);
    }
    public static void printArray(String[] data) 
    {
        for (int i = 0; i < data.length; i++) 
        {
          System.out.println(data[i]);
        }
    }
}
于 2013-10-28T18:56:32.513 に答える