首页 > 解决方案 > 以下代码的逻辑有什么问题?

问题描述

下面的代码只给出了两个输出(2和3),在这之后它被终止了,为什么它不继续?

public class PrimeSeries {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        boolean prime = true;
        
        for(int i=2;i<=N;i++) {
            for(int j=2;j*j<=i;j++) {
                if(i%j == 0) {
                    prime = false;
                    break;
                }
            }
            if(prime == true) {
                System.out.println(i);
            }
        }
    }
}

标签: java

解决方案


您提供的代码不起作用,因为您从未再次使变量 boolean prime 为 true 因此,只需在内部 for 循环的每次迭代后再次将boolean恢复为true即可。

   public class PrimeSeries {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            boolean prime = true;
            
            for(int i=2;i<=N;i++) {

               // ADD THIS LINE
               prime = true;

                for(int j=2;j*j<=i;j++) {
                    if(i%j == 0) {
                        prime = false;
                        break;
                    }
                }
                if(prime == true) {
                    System.out.println(i);
                }
            }
        }
    }

这就对了!


推荐阅读