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,这是一个问题.
你应该使用<而不是<=:
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.
更改数组长度(x - 1),然后使用<您已经找到的条件,以避免超出范围的异常.
您需要一个比您当前使用的元素大1个元素的数组的原因是因为有(n - 1)候选者必须考虑在2和n之间,而不是(n - 2).
例如,有两个小于或等于三个(2和3)的候选者,巧合的是,这两个候选者恰好都是素数.