0

我正在尝试创建一个程序,它将输出 N(N 是参数)素数(每行一个数字)。我的代码正常工作,但我意识到它并没有给我 N 个素数,它给了我 N 中的素数。所以如果我为我的论点输入 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

您必须将break放在大括号内:

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

否则,您将在第一次检查后退出(i % j == 0),并且不会检查所有j值。

于 2013-10-15T15:05:13.940 回答
0

在您的代码中:

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

看看它在做什么。它不看它是否是假的。它只是简单地跳出循环。你必须打破条件为真 -所以if把break语句放在语句里面if

if(i%j == 0)
{
  Prime = false;
  break;
}
于 2013-10-15T15:34:42.830 回答