[英]Trouble with creating a program that tells whether or not a number is prime
[英]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.