设计一个 class 来判断一个数是否为质数

Design a class that tells whether a number is prime or not

我的作业是设计一个 class 名为 MyInteger 的条件如下:

我的问题出现在静态布尔值 isPrime 方法中,指出“/”和“%”对于参数类型是未定义的,并且在我的 if 语句的主要方法中:isPrime() == true。它说要将其更改为静态,但我已经有一个静态布尔 isPrime 方法,并且根据我的条件我应该有两个 isPrime 方法。如果您能提供帮助,谢谢。

public class MyInteger {


    public MyInteger(int value){

    }
    public static int getValue(){
        int value = 997;
        return value;
    }
    public boolean isPrime(){
        int value = 997;
        for (int i=2; i<=value/2; i++){
            if(value % i == 0) {
                return false;
                }
        }
        return true;
    }
    public static boolean isPrime(MyInteger value){
        for(int i=2; i<=value/2; i++){
            if(value%i == 0){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
            MyInteger value = new MyInteger(MyInteger.getValue());
            if (isPrime()==true && isPrime(value)==true){
                System.out.println("Testiwng Instance method, is Prime");
                System.out.println("isPrime: " + value + " is prime");
                System.out.println("--------------------------------");
                System.out.println("Testing Class method (That takes a reference variable) is Prime");
                System.out.println("isPrime: " + value + " is prime");
            }
            else{
                System.out.println("Testiwng Instance method, is Prime");
                System.out.println("isPrime: " + value + " is not prime");
                System.out.println("--------------------------------");
                System.out.println("Testing Class method (That takes a reference variable) is Prime");
                System.out.println("isPrime: " + value + " is not prime");
            }

      } 
}

您提到的方法中的值变量是 MyInteger 类型,但您试图将其用作 int。您可能想改用 value.getValue()。

您不必走到数字的一半就可以检查它是否是素数。你可以有一个循环,只检查从 2 到你的数字的平方根的数字。看到这个 - Whosebug question about checking prime numbers

我相信你需要这样的东西:

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner inp = new Scanner(System.in);
        int someValue = inp.nextInt();
        MyInteger myInt = new MyInteger(someValue);
        System.out.println("Testing instance method:");
        System.out.println(myInt.isPrime());
        System.out.println("Testing static method:");
        System.out.println(MyInteger.isPrime(myInt));
    }
}

class MyInteger {
    private int value;

    public MyInteger(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public boolean isPrime() {
        int sqrt = (int) Math.sqrt((double)value);
        for(int i = 2; i <= sqrt; i++) {
            if (value % i == 0) return false;
        }
        return true;
    }

    public static boolean isPrime(MyInteger myInt) {
        return myInt.isPrime();
    }
}

您应该考虑使用 class 级别变量来利用构造函数对其进行初始化。 同样在 main() 方法中,您试图访问非静态方法 (isPrime()),将其用作 value.isPrime()。

如果您不想使用 class 变量,请在 static boolean isPrime(MyInteger value) 方法中使用 static getValue() 方法来解决您的问题

这是测试素数的好参考What would be the fastest method to test for primality in Java?

首先,将您的 isPrime() 更改为

boolean isPrime(long n) {
    if(n < 2) return false;
    if(n == 2 || n == 3) return true;
    if(n%2 == 0 || n%3 == 0) return false;
    long sqrtN = (long)Math.sqrt(n)+1;
    for(long i = 6L; i <= sqrtN; i += 6) {
        if(n%(i-1) == 0 || n%(i+1) == 0) return false;
    }
    return true;
}

Another way to check the prime number

 public String isPrime(int number) {
    if (number < 0) {
        return "not a valid number";
    }
    if (number == 0 || number == 1) {
        return "not a prime number";
    }
    if (number == 2 || number == 3) {
        return "prime number";
    }
    if ((number * number - 1) % 24 == 0) {
        return "prime number";
    } else {
        return "not a prime number";
    }
}