在java中进行素数测试

时间:2015-06-20 18:38:40

标签: java primes

我的作业告诉我要执行以下操作:

  

创建一个名为IsPrime()的方法,该方法接受一个正整数作为参数。如果数字为素数,则该方法应返回true。 (素数只能被1和它本身整除)。将此方法合并到名为MyMathMethods的类中。在一个名为MainFile的单独类中创建一个main()方法,该类将通过使用输入对话框询问用户输入数字来测试IsPrime(),然后报告该数字是否为素数。

如何连接这两个文件? 这是我的代码:

     package x;
     import java.util.Scanner;
    public class MyMathMethod
 { 
 public static boolean isPrime(int num)
 {


 int result=0;
   System.out.println("enter no");
  Scanner s = new Scanner(System.in);
  num =s.nextInt();
  long sqrt = (int) Math.sqrt(num);
  for(long divisor = 2; divisor <= sqrt; divisor++) 
 {
        if(num % divisor == 0)
{  
                // This only needs to happen once
              // for this number to NOT be prime
  return false;
        }
}
// If we get here, the number is prime.
return true;
  }
   }

另一个文件是

   import x.*;
   package y;
 public class MainFile {
  public static void main(String [] args) {

  boolean isNumberPrime;
    int num;
 MyMathMethod methods = new MyMathMethod();
 isNumberPrime = methods.isPrime(num);
{

如果(NUM =真)         System.out.println(num +“是Prime Number”);      其他        System.out.println(num +“不是Prime Number”);      }     }     }

提前致谢。

1 个答案:

答案 0 :(得分:2)

你想从另一个类的main中调用方法isPrime()吗?

当他们在同一个包中时,你必须创建一个MyMathMethods类的新实例并调用方法isPrime()。当他们在不同的班级时,你必须导入失踪的班级,并按照上述方式进行。如果您不手动导入它,可能您的IDE将为您执行或要求它。

第一个文件:

package x;
public class MyMathMethods {
  public boolean isPrime(int number) {
    //your code here
    return false;
  }
 }

第二个:

package y;
import x.* //importing all files from the package x
           //if your class MyMathMethods is in the same package, you don't need that
public class MainFile {
  public static void main(String [] args) {
    int number = 20; 
    boolean isNumberPrime;
    MyMathMethods methods = new MyMathMethods();
    isNumberPrime = methods.isPrime(number); //here the result if it's prime
  }
 }

编辑:我会尝试修复您的代码。

如果您想让方法保持静态,可以调用它:

MyMathMethods.isPrime(numer);

无需创建新的实例。

下一个问题:为什么要将未初始化的变量(num)传递给函数并尝试从此方法的输入中获取此值?嗯,这不是一个好习惯。我宁愿建议从main中获取用户的输入(直接在main中调用另一个函数的main中),然后将值传递给isPrime()。

package y;
import x.* 
public class MainFile {
  public static void main(String [] args) {
    int num;
    Scanner s = new Scanner(System.in);
    num =s.nextInt();
    if(MyMathMethods.isPrime(num)) {
      //if true, your code;
    } else {
      //false, your code;
    }
  }
 }

 package x;
 public class MyMathMethod { 
 public static boolean isPrime(int num) {
   if (num <= 1) {           
     return false;
   }
   for (int i = 2; i < Math.sqrt(num); i++) {
     if (num % i == 0) {
       return false;
     }
   }
   return true; 
 }
}

您的算法因许多数字而失败,例如0,1,2。嗯,对于这个值,它甚至没有返回任何值。请始终保护您的方法免受任何可能的错误参数的影响。