【问题标题】:Prime numbers with While loops带有 While 循环的素数
【发布时间】:2016-03-23 18:26:50
【问题描述】:

我正在尝试编写一个程序来检查它是否是素数,如果为真则返回一个字符串yes,如果为假则返回no。我试图在我的主要方法中只使用 while 循环来完成它,但我在执行它时遇到了问题。我在 void 方法中完成了它,并在我的 main 方法中调用了该方法,但这不是我想要的。

我希望它在我的 main 方法中,如果它是素数则返回一个字符串 yes,如果它不是素数则返回一个字符串 no。请问有什么想法吗?在下面的方法中查看我的代码。关于如何在我的 main 方法中将其转换为返回 yes 或 no 作为字符串的任何想法?

import java.util.Scanner;

public class PrimeNumbers {
  public static void main(String[] args) {

    Scanner in = new Scanner(System.in);

    System.out.print("Enter a number: ");
    int number = in .nextInt();

    isPrime(number);
  }

  public static void isPrime(int n) {
    if (n % 2 == 0) {
      System.out.println("It is not a prime number");
      return;
    } else {
      int i = 3;
      while (i <= Math.sqrt(n)) {
        if ((n % i) == 0) {
          System.out.println("It is not a prime number");
          return;
        }
        i = i + 2;
      }
    }
    System.out.println("It is a prime number");
    return;

  }

}

【问题讨论】:

  • 如何将isPrime() 的正文复制到main() 现在isPrime(number); 所在的位置? (当然将n 更改为number(反之亦然)。)
  • 你不能从 void 方法返回字符串。
  • 您的 isPrime 方法不正确。任何小于或等于 1 的整数都不是素数。 2 & 3 是素数。 4 不是素数。正如您在 while 循环中所做的那样,可以测试任何大于等于 5 的整数。
  • 由于 Math.sqrt(n) 很昂贵,因此您只需计算一次,而不是每次迭代。

标签: java while-loop primes


【解决方案1】:

Erhm,只需复制并粘贴到您的 main 方法体中,然后使用 boolean 来确定要打印的结果。

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.print("Enter a number: ");
    int number = in.nextInt();
    boolean prime = false;

    if (number % 2 == 0) {
        prime = false;
    } else {
        int i=3;
        while (i<=Math.sqrt(number)) {
            if ((number % i) == 0) {
                prime = true;
            }
            i+=2;
        }
    }

    if (prime) {
        System.out.println("It is a prime number");
    } else {
        System.out.println("It is not a prime number");
    }
}

【讨论】:

    【解决方案2】:

    让您的 isPrime 方法返回 boolean 而不是 void

    public static boolean isPrime(int n) {
      if (n % 2 == 0) {
        return false;
      } else {
        int i = 3;
        while (i <= Math.sqrt(n)) {
          if ((n % i) == 0) {
            return false;
          }
          i = i + 2;
        }
      }
      return true;
    }
    

    然后在main 中检查

    if(isPrime(2)) {
        System.out.println("Is a prime number!");
    } else {
        System.out.println("It is not a prime number!");
    }
    

    【讨论】:

      【解决方案3】:

      我有点不确定你想要什么。听起来您想创建一个返回 yes 或返回 no 的函数?如果是这种情况,您可以创建以下算法:

      public static String isPrime(int num){
          for(int i = 2; i < num; i++) {
              if(num % i == 0)
                  return "No";
          }
          return "Yes";
      }
      

      有关如何优化此算法的详细信息,请参阅here

      那你就可以直接调用main中的方法了:

      public static void main(String[] args) {
      
          Scanner in = new Scanner(System.in);
      
          System.out.print("Enter a number: ");
          int number = in.nextInt();
      
          System.out.println(isPrime(number)); 
      }
      

      如果您只想将所有内容都放在主目录中,请这样做:

      public static void main(String[] args) {
      
          Scanner in = new Scanner(System.in);
      
          System.out.print("Enter a number: ");
          int number = in.nextInt();
          boolean b = true;
      
          for(int i = 2; i < num; i++) {
              if(num % i == 0){
                  System.out.println("No");
                  b = false;
              }
          }
          if(b){
              System.out.println(isPrime(number));
          }
      }
      

      【讨论】:

        【解决方案4】:
        /**
         * Auto Generated Java Class.
         */
        public class ConvertingForToWhile {
        
        
          public static void main(String[] args) { 
            final int MAX = 66;
            boolean isPrime = true;
            int j = 2;
        
            while ( j <= MAX/2 && isPrime)
            {
              if( MAX % j ==0)
              {
                isPrime = false;
              }
              j++;  
            }
            System.out.println( MAX  + " is Prime? " + isPrime );
        
          }
        
        
        
        }
        

        【讨论】:

        • 这将检查最大值中的数字,如果您想从用户那里获取数字,只需导入扫描并初始化一些变量,如 int number;
        【解决方案5】:
        import java.util.*;
        public class Prime
        {
        public static void main(String[]args)
        {
        int num;
        int count = 0;
        int divide = 2;
        
        Scanner kb = new Scanner(System.in);
        
        System.out.println("Enter a number user:");
        num = kb.nextInt();
        
        for(int x = 0;x<num;x++)
        {
        if((num%div)==0)
        {
        count+=1;
        div = div + 1;
        }
        }
        if(count==0)
        {
        System.out.println(num +" "+ "is a prime number");
        }
        else
        {
        System.out.println(num+" " +"is not a prime number");
        }
        
        }
        }
        

        【讨论】:

        • 我在 Mangosuthu 科技大学学习 IT 时发现
        • 虽然此代码可能会回答问题,但您仍然可以考虑添加一些解释性句子,因为这会增加您的答案对其他用户的价值。
        猜你喜欢
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        相关资源
        最近更新 更多