Java - 使用用户指定大小的数组初始化

时间:2014-04-02 21:15:43

标签: java arrays initialization array-initialization

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

3 个答案:

答案 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,你就是 尝试向其中添加元素时失败。