【问题标题】:Prime Number in Java - Output not displayedJava 中的质数 - 不显示输出
【发布时间】:2022-12-03 02:58:47
【问题描述】:

所以,我一直在尝试创建一个程序,通过使用素数应该只有 2 个因子的理论来打印素数。但是当我尝试循环时,数字无法显示。为什么?谁能指出我的错误?

public class NewClass {
    
    public static void main(String[] args){
        
        double factor;
        int x,y,counter = 0;
        for (x = 1; x <= 50; x++){
            for (y = 1; y <= 50; y++){
                factor = x%y;
                if (factor == 0){
                    counter += 1;
                }
                else{
                    counter += 0;
                }
            }
            if (counter == 2){
                System.out.println(x);}
        } 
    }
}
 

我原以为应该打印出只有 2 个因子的数字,但什么也没有发生。请帮我。

【问题讨论】:

    标签: java loops primes


    【解决方案1】:

    您的代码存在一些问题,导致它无法按预期工作:

    1. 您正在为因子变量使用 double 数据类型,但此计算不需要 double - int 就足够了。

    2. 您根据因子是否为 0 将计数器变量递增 1 或 0,但这不会为给定数字提供正确的因子数。相反,您应该只在因子为 0 时递增计数器,然后在内部循环完成后检查计数器是否等于 2。

    3. 如果计数器等于 2,您只打印数字,但这意味着您将只打印恰好有 2 个因数的数字,这不是您想要的 - 您想要打印只有 2 个因数的数字。为此,您需要在外循环的每次迭代后将计数器变量重置为 0,然后仅当在内循环完成后计数器等于 2 时才打印数字。

      以下是我将如何重写您的代码来解决这些问题:

      public class NewClass {
      public static void main(String[] args){
          
          int factor;
          int x,y,counter = 0;
          for (x = 1; x <= 50; x++){
              counter = 0; // reset the counter for each iteration of the outer loop
              for (y = 1; y <= 50; y++){
                  factor = x%y;
                  if (factor == 0){
                      counter += 1;
                  }
              }
              if (counter == 2){ // only print the number if it has only 2 factors
                  System.out.println(x);
              }
          } 
      }
      }
      

      通过这些更改,您的代码应按预期打印 1 到 50 之间的质数。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2018-05-15
      • 2019-07-14
      相关资源
      最近更新 更多