Java 设计一个类来告诉一个数是否为素数

Java 设计一个类来告诉一个数是否为素数,java,methods,primes,Java,Methods,Primes,我的作业是设计一个名为MyInteger的类,并满足以下条件: 名为value的int数据字段,用于存储整数的int值 为指定的int值创建MyInteger对象的构造函数 返回int值的get方法 一种方法,isPrime,如果值是素数,则返回true。有关检测素数的Java代码,请参见本文的第4.10节。根据您所使用的版本,这可能会有所不同\ 一种静态isPrimeMyInteger,如果值是素数,则返回true。请注意,此方法将对象引用变量而不是值作为参数 我的问题出现在静态布尔isPri

我的作业是设计一个名为MyInteger的类,并满足以下条件:

名为value的int数据字段,用于存储整数的int值

为指定的int值创建MyInteger对象的构造函数

返回int值的get方法

一种方法,isPrime,如果值是素数,则返回true。有关检测素数的Java代码,请参见本文的第4.10节。根据您所使用的版本,这可能会有所不同\

一种静态isPrimeMyInteger,如果值是素数,则返回true。请注意,此方法将对象引用变量而不是值作为参数

我的问题出现在静态布尔isPrime方法中,声明/和%对于arguement类型是未定义的,在if语句的main方法中是: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到数字平方根的数字。见此——

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

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();
    }
}

您应该考虑使用类级别变量来使用构造函数初始化它。 同样在main方法中,您尝试访问非静态方法isPrime,将其用作value.isPrime


如果您不想使用类变量,请在静态布尔isPrimeMyInteger值方法中使用静态getValue方法,它可以解决您的问题

首先,将您的iPrime更改为

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;
}
检查素数的另一种方法


iPrime的主要用途是什么?静态方法没有实例…如果你的数字不能被2整除,你需要检查它是否可以被4整除吗?一种可能的优化方法是使用Eratosthenes筛来计算小于SquareRootvalue的素数,然后根据该列表进行余数检查。
 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";
    }
}