输出前50个素数

为啥我的素数打印不出来啊,程序一直在跑着呢

package hello;

import java.util.Scanner;

public class hello {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int i=1;
        int n=1; 
        while(i!=50)
        {
            n++;
            for(int j=2;j<n;j++)
            {
                if(n%j!=0)
                {
                    System.out.print(n+" ");
                    i++;
                }
            }
            
        }
    }
}
阅读 3.2k
2 个回答

从这个代码风格来看,应该是个新手,有几个点要注意:

  1. while循环不要用不等于 (!=) 作为判断条件,如果要取前50个,可以while(i<=50)判断。【这就是你程序不退出的元凶】
  2. 素数的概念理解不对,并不是判断一组数取余不等于0就可以,而是判断所有数取余等于0就不是素数。
public static void main(String[] args) {
        int i = 1;
        int n = 1;
        while (i <= 50) {
            n++;
            boolean isPrime = true;
            for (int j = 2; j < n; j++) {
                if (n % j == 0) {
                    isPrime = false;
                    break;
                }
            }
            if(isPrime){
                System.out.print(n + " ");
                i++;
            }
        }
    }
int n=1;
label:while (n++ <= 50 ){
    for (int i = 2; i <n ; i++) {
        if(n % i == 0){
            continue label;
        }
    }
    System.out.print(" "+n+" ");
}
推荐问题