【问题标题】:Java: Array Index Out of Bounds ExceptionJava:数组索引越界异常
【发布时间】:2010-10-16 23:24:44
【问题描述】:
System.out.print("Enter an integer:  ");
Scanner sc = new Scanner(System.in);

int x = sc.nextInt();
int lArray = x - 2;
int[] newArray = new int[lArray];

System.out.println("Let's display all possible integers...");
for (int i = 0; i <= newArray.length; i++) {
    newArray[i] = i + 2;
    System.out.print(newArray[i] + " ");
}

我最近才开始使用 Java,但我确信如果我用另一种语言进行类似的编码,我会面临同样的问题。这是一个应用程序的摘录,它列出了用户输入之前的所有素数。

之所以用x-2作为lArray的定义,是因为数组的长度会是从2到数{2,3,4,5...x}的所有整数。

我注意到这条线

for (int i = 0; i <= newArray.length; i++) {

如果我将i &lt;= newArray 更改为i &lt; newArray,则代码可以正常工作。但是,如果 x 是素数,用户的输入 x 会被忽略。

【问题讨论】:

    标签: java


    【解决方案1】:

    你应该使用&lt;而不是&lt;=

    for (int i = 0; i <= newArray.length; i++)
                      ^^
    

    如果foo任意数组,foo的有效索引为[0,foo.length-1]

    使用foo.length作为索引会导致ArrayIndexOutofBoundsException

    还有lArray,它包含自然数的个数&lt;=x,但只排除一个个数1,它的值应该是x-1而不是@ 987654333@.

    【讨论】:

      【解决方案2】:

      将数组长度改为(x - 1),并使用&lt; 条件,您已经发现这是避免越界异常所必需的。

      您需要一个比您当前使用的元素大 1 个元素的数组的原因是,必须在 2 和 n 之间考虑 (n - 1) 候选者,而不是 (n - 2)

      例如,有两个候选项小于或等于三(2 和 3),巧合的是,这两个候选项都是素数。

      【讨论】:

        【解决方案3】:
        for (int i = 0; i <= newArray.length; i++) //should be <, not <=
        for (int i = 0; i < newArray.length; i++)
        

        【讨论】:

          【解决方案4】:

          你需要使用:

          int lArray = x - 1;
          

          并更改您的条件以使用&lt; 而不是&lt;=

          在 Java 中和在 C/C++ 中一样,数组都是基于零的。因此,您的 N 值数组将从索引 0 变为 N-1

          以你为例:{2, 3, 4, 5... x}

          您将需要N-1 值来将除1 之外的所有正数存储在整数数组中。因此,如果 N 等于 4,您的数组将是:

          newArray[0] = 2;
          newArray[1] = 3;
          newArray[2] = 4;
          

          因此,数组长度必须为 3 (N-1)。

          【讨论】:

            猜你喜欢
            • 2016-01-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-25
            • 1970-01-01
            • 1970-01-01
            • 2018-11-19
            相关资源
            最近更新 更多