-1

我正在尝试创建一个程序,该程序从用户输入接收数组的大小,然后接受该数量的整数,然后显示其中的所有素数。因此,例如,如果用户输入他们希望数组大小为 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)"
4

3 回答 3

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

于 2014-04-02T21:17:08.813 回答
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___() 处被拾取,所以我倾向于避免使用它。然而,这只是个人选择。

我希望这有帮助 :)

于 2014-04-02T21:34:20.570 回答
-1

这里

int i=0;
int[] Array = new int[i];

您为阵列保留存储空间,但此时i仍在0

因此,数组的长度为0
当您尝试向其中添加元素时会失败。

于 2014-04-02T21:19:12.097 回答