-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

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.next___() で取得されるキューに空のスペースが残るため、以前は Scanner.nextInt() に問題があったため、使用を避ける傾向があります。ただし、それはあくまでも個人の選択です。

これが役立つことを願っています:)

于 2014-04-02T21:34:20.570 に答える