【问题标题】:GUI to check for prime numbers用于检查素数的 GUI
【发布时间】:2014-05-24 13:31:00
【问题描述】:

我已更新代码以反映 BigInteger 编号。但我现在收到显示消息错误。语法错误在 IsPrime 下。如何更改此字符串输出以向用户显示正确的显示消息?这是我的代码:

         public static void main (String [] args){
    //prompt user to input a number

    String input = JOptionPane.showInputDialog("Enter number "); 
    // change string to int
        int number = Integer.parseInt(input); 

    //display message to user of their results
        BigInteger num = new BigInteger(input); 

        String output = number + " is" + (BigInteger(input) ? " " : " not ") + "a prime number: " + BigInteger(input);

            JOptionPane.showMessageDialog (null, output);

}   



public static Boolean IsPrime(BigInteger num) {
    // check if number is a multiple of 2
    if (num.mod(new BigInteger("2")).compareTo(BigInteger.ZERO) == 0) {
      return false;
    }// if not, then just check the odds
    for (BigInteger i = new BigInteger("3"); i.multiply(i).compareTo(num) <= 0; i =
        i.add(new BigInteger("2"))) {
      if (num.mod(i).compareTo(BigInteger.ZERO) == 0) {

       return false;
      }
    }
    return true;
  }

}

【问题讨论】:

  • 按照惯例,方法和变量的名称以小写开头(与类名相反)。进入你的问题,首先,你永远不会打电话给IsPrime(int)
  • 一旦IsPrime 为假就打破循环。遵循 java 命名约定。
  • +num 是什么意思?有什么意义吗?

标签: java swing user-interface boolean


【解决方案1】:

您的 IsPrime 方法需要一个大整数 - 但所有检查都使用标准整数 - 如果您的用户想要变得困难,这将导致问题。这是检查一般 BigIntegers 素数的工作代码。

  public static Boolean IsPrime(BigInteger num) {
        // check if number is a multiple of 2
        if (num.mod(new BigInteger("2")).compareTo(BigInteger.ZERO) == 0) {
          return false;
        }// if not, then just check the odds
        for (BigInteger i = new BigInteger("3"); i.multiply(i).compareTo(num) <= 0; i =
            i.add(new BigInteger("2"))) {
          if (num.mod(i).compareTo(BigInteger.ZERO) == 0) {

           return false;
          }
        }
        return true;
      }

【讨论】:

  • 如何更改以下内容以获得反映新 BigInteger 代码的输出?字符串输出 = number + "is" + (IsPrime(number) ? " " : " not ") + "一个素数:" + IsPrime(number);
【解决方案2】:

试试这个来检查素数

boolean isPrime(int n) {
    for(int i=2;2*i<n;i++) {
        if(n%i==0)
            return false;
    }
    return true;
}

一种更快的检查素数的方法

boolean isPrime(int n) {
    //check if n is a multiple of 2
    if (n%2==0) return false;
    //if not, then just check the odds
    for(int i=3;i*i<=n;i+=2) {
        if(n%i==0)
            return false;
    }
    return true;
}

--编辑--

根据您更新的问题和 cmets

试试这个

String output = number + " is" + (isPrime(number) ? " " : " not ") + "a prime number.";

【讨论】:

  • 这很有帮助!我现在遇到问题,当它是素数时显示正确的“是素数”,当它不是素数时显示“不是素数”。代码显示“每次都是质数,无论数字是多少。这就是我所拥有的: String input = JOptionPane.showInputDialog("Enter number "); int number = Integer.parseInt(input); String output = number + " 是素数:" + IsPrime(number); JOptionPane.showMessageDialog (null, output);
  • 您的代码可以正常工作。只需使用我帖子中定义的方法。有什么问题吗?
  • 好的,我帮你做吧
  • 代码反映了正确的真/假响应,但无论我输入什么数字,它仍然是“是素数”。我需要添加额外的字符串输出吗?
  • 试试这个String output = number + " is" + (IsPrime(number) ? " " : " not ") + "a prime number: ";
猜你喜欢
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2015-06-27
  • 2015-05-24
  • 1970-01-01
  • 2021-04-20
相关资源
最近更新 更多