我试图创建一个程序,从用户输入接收数组的大小,然后接受该数量的整数,然后显示其中的所有素数。因此,例如,如果用户输入他们希望数组大小为5,那么它应该允许用户输入5个整数。但是我被困了,它给了我一个错误。
import java.util.Scanner;
public class arrayprime {
public static void main (String[] Args)
{
boolean isprime = true;
int i=0;
int[] Array = new int[i];
Scanner keyboard = new Scanner (System.in);
System.out.println("Please enter how large you want the array to be: ");
i = keyboard.nextInt();
for (int j=0; j<i; j++)
{
System.out.println("Please enter an integer: ");
Array[j] = keyboard.nextInt();
}
int k = 2;
while (k <= Math.sqrt(Array[i]))
{
if (Array[i] % k == 0)
{
isprime = false;
break;
}
k++;
}
if (isprime==true)
{
System.out.println(Array[i] + "is prime.");
}
}
}
我得到的错误是:
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at arrayprime.main(arrayprime.java:18)"
答案 0 :(得分:1)
阅读您的代码:
int i=0;
int[] Array = new int[i]; //--> Array = new int[0]
...
while (k <= Math.sqrt(Array[i])) //"i" can be any number, but Array has size 0.
移动
i = keyboard.nextInt();
在Array
初始化之前
答案 1 :(得分:0)
当您检查所有素数时,您需要遍历整个数组。
一旦你知道你想要它有多大,你也应该初始化数组。
最后,你需要考虑少于2的数字而不是素数。
如果您进行了这些更改,您应该得到以下内容:
import java.util.Scanner;
public class arrayprime {
public static void main (String[] Args)
{
boolean isprime = true;
int i=0;
Scanner keyboard = new Scanner (System.in);
System.out.println("Please enter how large you want the array to be: ");
i = keyboard.nextInt();
int[] Array = new int[i];
keyboard.nextLine();
for (int j=0; j<i; j++)
{
System.out.println("Please enter an integer: ");
Array[j] = keyboard.nextInt();
keyboard.nextLine();
}
for (i = 0; i < Array.length; i++){
int k = 2;
if (Array[i] < 2){
isprime = false;
}
else{
while (k <= Math.sqrt(Array[i]))
{
if (Array[i] % k == 0)
{
isprime = false;
break;
}
k++;
}
}
if (isprime)
{
System.out.println(Array[i] + " is prime.");
}
isprime = true;
}
}
}
我相信你想要的是什么。
编辑:之前我遇到过Scanner.nextInt()的问题,因为它在队列中留下了一个空的空间,在下一个Scanner.next ___()中被拾取,所以我倾向于避免使用它。然而,这只是个人选择。
我希望这会有所帮助:)
答案 2 :(得分:-1)
下面
int i=0;
int[] Array = new int[i];
您为阵列保留了存储空间,但此时i
仍为0
。
所以数组的长度为0
,你就是
尝试向其中添加元素时失败。