我是Java的新手,只是无法弄清楚为什么我的程序无法运行。任何人都可以提供帮助的人将不胜感激!
public class LabOne {
public static void main(String[] args) {
System.out.println("Please input a number: \n");
int inputReceive = 44;
int nextPrime = inputReceive;
int n = 5;
boolean isprime=true;
do {
if(inputReceive <= 1)
isprime = false;
else if(inputReceive <= 3){
System.out.printf("%d \n",isprime);
return;
}else if( inputReceive % 2 == 0 || inputReceive % 3 == 0)
isprime = false;
while ((n*n)<inputReceive){
if (inputReceive % n == 0 || inputReceive % (n + 2) == 0)
isprime = false;
n = n+6;
isprime = true;
}
nextPrime++;
}while(isprime = false);
System.out.printf("Next prime number is %d",nextPrime);
}
}
给出的输出为45,这是不正确的。
答案 0 :(得分:0)
一些问题:
while(isprime = false);
这个任务,而不是平等测试。由于您正在分配false
,因此不会循环。
n = n+6;
isprime = true;
你无条件地这样做。
继续扩张。
答案 1 :(得分:0)
忽略已经指出的内容,您在inputRecieve
上执行所有检查,并且永远不会更新它。您只能无条件地更新nextPrime
,而且永远不会检查其优先级。我将如何做到这一点:
public static boolean isPrime(int x){
boolean result = true;
for(int i = 2; i<=Math.sqrt(x); i++){
if((x % i) == 0){
result = false;
}
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Please insert a number:");
int inputRecieve = sc.nextInt();
boolean notPrime = true;
while(notPrime){
if(isPrime(++inputRecieve))
notPrime = false;
}
System.out.println("Next prime number is: " + inputRecieve);
}