簡體   English   中英

設計一個告訴數字是否為質數的類

[英]Design a class that tells whether a number is prime or not

我的作業是設計一個具有以下條件的名為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問題

我相信您需要這樣的東西:

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

這是測試素數的良好參考。 用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;
}

您提到的方法中的value變量類型為MyInteger,但是您嘗試將其用作int。 您可能想使用value.getValue()代替。

您應該考慮使用類級別的變量來利用構造函數對其進行初始化。 同樣在main()方法中,您嘗試訪問非靜態方法(isPrime()),請將其用作value.isPrime()。

如果您不想使用類變量,請在靜態布爾boolean isPrime(MyInteger value)方法中使用靜態getValue()方法,以解決您的問題

檢查素數的另一種方法

 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";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM