0

N 個 (N は引数) の素数 (1 行に 1 つの数値) を出力するプログラムを作成しようとしています。コードは機能していましたが、それは N 個の素数を与えているのではなく、N 内で素数である数を与えていることに気付きました。したがって、引数に 10 を入れても、最初の数は得られません。 10 個の素数を計算すると、2、3、5、6、7、9 になります。

すると、6 と 9 が素数ではないことに気付きました。そのため、for ループを修正しようとしましたが、6 を取り除くことしかできませんでした。

プログラムをいじろうとしていますが、方法がわかりません

  1. N の範囲の素数ではなく、最初の N 個の素数を出力し、
  2. 素数のみが含まれるようにループを修正します。

私の現在の考えは、N を再定義しようとすることですが、その後、私が書いた行に "'.class' expected" というエラー メッセージが表示されますN=boolean class Prime。このプログラムでは配列を使用する必要があるかもしれないと思いますが、私は Java を初めて使用するので、これはかなり難しくなっています。

public class Prime{

    public static void main (String[] args){

        int N;

        try{
            N=Integer.parseInt(args[0]);
        }catch(NumberFormatException e){
            System.out.println("Please enter only valid integers.");
            System.out.println(e.getMessage());
            return;
        }
        if(N<=0){
            System.out.println("N must be a positive integer larger than 0.");
            return;
        }

        N=boolean class Prime;

        for(int i=2; i<N; i++){

            boolean Prime=true;

            for (int j=2; j<i; j++) {

                if (i%j==0) {
                    Prime=false;
                }
                break;

            }           

            if (Prime) {
                System.out.println(i+" ");
            }

        }

    }
4

3 に答える 3

0

これは、あなたがやりたいことをするために私が少し前に書いたコードです。これからどこが間違っているかを理解できるかどうかを確認してください。

import java.util.*;

class PrimeTest{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int test = -1;

        while(test != 0){
        System.out.println("Write number to check if prime: (exit with 0)");
        test = sc.nextInt();
        boolean b;

        Test t = new Test();
        b = t.isPrime(test);

        if(b)
            System.out.println("Prime");
        if(!b)
            System.out.println("Not prime");
        }
    }

}

class Test{
    boolean isPrime(int n){
            for (int i = 2; i < n; i++){
                if(n%i == 0)
                    return false;
            }
            return true;
        }
}
于 2013-10-15T15:03:17.707 に答える
0

中括弧の中にブレークを入れる必要があります:

if (i%j==0) {
    Prime=false;
    break;
}

そうしないと、最初のチェック後に終了し、すべての値(i % j == 0)をチェックしません。j

于 2013-10-15T15:05:13.940 に答える