我试图搜索类似的问题,看看答案是否可能在这个网站上无济于事。 我目前正在尝试编写一个程序,使用递归方法确定用户输入是否为素数。问题是它不会编译到变量" n"已经在范围内定义。我不太清楚编译器的含义。 继承人是我的代码
/**
* Created on 3/26/2017.
**/
import java.util.Scanner;
public class PrimeNumberRecursion {
public static void main(String[] n) {
//Variables declared
Scanner userInput = new Scanner(System.in);
int n;
int div = 2;
//Program is introduced
System.out.println(" Prime Number Recursion Program");
System.out.println("*********************************");
//User is prompted for a number
System.out.print("Please enter a number: ");
n = userInput.nextInt();
//Conditional statement prints result
if(isPrime(n,div) == 1){System.out.println(n +" is a prime number");}
else{System.out.println(n +" is not a prime number");}
}
//User input is passed to isPrime recursive method
public static int isPrime(int n, int div) {
if(n == 1) {return 1;}
else if(n % div == 0) {return -1;}
else if(n == div) {return -1;}
else{return isPrime(n, ++div);}
}
}
答案 0 :(得分:0)
' N'是一个重复的变量。您正在int n;
和String[] n
使用它,将String [] n
重命名为n1或其他
答案 1 :(得分:0)
如果从2开始,您只需要检查n的平方根以获得更高的效率。同样如前所述,任何低于2的数字都不是素数。
public static boolean isPrime(int n, int div) {
if ( n < 2 || Math.sqrt(n) > div) {
return false;
} else if (n % div == 0) {
return true;
} else {
return isPrime(n, ++div);
}
}