我的作业是设计一个具有以下条件的名为MyInteger的类:


一个名为value的int数据字段,用于存储整数的int值。
为指定的int值创建MyInteger对象的构造函数。
返回int值的get方法。
isPrime()方法,如果值是质数则返回true。有关检测素数的Java代码,请参见文本的-4.10节(具体取决于您使用的版本)。\
静态isPrime(MyInteger),如果值是质数则返回true。请注意,此方法将对象引用变量(而不是值)作为参数。


我的问题出在静态的布尔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");
            }

      }
}

最佳答案

您不必检查数字的一半即可检查它是否为质数。您可以有一个循环,仅检查从2到数字平方根的数字。看到这个-StackOverflow 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();
    }
}

10-06 09:05