Java:数组索引超出界限异常

Arl*_*rly 7 java

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] + " ");
}
Run Code Online (Sandbox Code Playgroud)

我最近刚刚开始使用Java,但我确信如果我用其他语言编写类似的代码,我会遇到同样的问题.这是一个应用程序的摘录,它列出了用户输入之前的所有素数.

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

我注意到了这条线

for (int i = 0; i <= newArray.length; i++) {
Run Code Online (Sandbox Code Playgroud)

如果我i <= newArray改为i < newArray,代码可以正常工作.但是,如果x是素数,则省略用户的输入x,这是一个问题.

cod*_*ict 6

你应该使用<而不是<=:

for (int i = 0; i <= newArray.length; i++)
                  ^^
Run Code Online (Sandbox Code Playgroud)

如果foo任何阵列,的有效索引foo[0,foo.length-1]

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

并且lArray其中包含自然数的数量<=x但仅排除一个数字1,其值应该是x-1和不是x-2.


Ani*_*Ani 5

更改数组长度(x - 1),然后使用<您已经找到的条件,以避免超出范围的异常.

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

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