我的作业是设计一个名为MyInteger的类,其中包含以下条件:
一个名为value的int数据字段,用于存储整数的int值。
为指定的int值创建MyInteger对象的构造函数。
返回int值的get方法。
一个方法,isPrime(),如果值是素数,则返回true。有关检测素数的Java代码的文本,请参阅第4.10节(这可能因您的版本而异)。\
静态isPrime(MyInteger),如果值为素数,则返回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");
}
}
}
答案 0 :(得分:3)
你不必去数字的一半来检查它是否是素数。您可以使用一个循环来仅检查从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();
}
}
答案 1 :(得分:2)
这是测试素数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;
}
答案 2 :(得分:1)
您提到的方法中的值变量属于MyInteger类型,但您尝试将其用作int。你可能想要使用value.getValue()。
答案 3 :(得分:1)
您应该考虑使用类级变量来使用构造函数来初始化它。 同样在main()方法中,您尝试访问非静态方法(isPrime()),将其用作value.isPrime()。
如果您不想使用类变量,请在静态布尔值isPrime(MyInteger值)方法中使用静态getValue()方法来解决您的问题
答案 4 :(得分:0)
另一种检查素数的方法
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";
}
}