Java 使用递归确定输入是否为素数

Java 使用递归确定输入是否为素数,java,recursion,Java,Recursion,我试着搜索类似的问题,看看答案是否在这个网站上,但没有结果。 我目前正试图编写一个程序,用递归方法确定用户输入是否为素数。问题是它不会编译do到范围中已经定义的变量“n”。我不太明白编译器的意思。 这是我的密码 /** * Created on 3/26/2017. **/ import java.util.Scanner; public class PrimeNumberRecursion { public static void main(String[] n) {

我试着搜索类似的问题,看看答案是否在这个网站上,但没有结果。 我目前正试图编写一个程序,用递归方法确定用户输入是否为素数。问题是它不会编译do到范围中已经定义的变量“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);}
    }
}

“n”是重复变量。您在
intn使用它
String[]n
String[]n
重命名为n1或其他

如果从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);
    }
}
公共静态布尔值isPrime(int n,int div){
如果(n<2 | |数学sqrt(n)>div){
返回false;
}else if(n%div==0){
返回true;
}否则{
返回isPrime(n,++div);
}
}

不用担心。如果你对答案满意,请注明你是否也知道我确定素数的逻辑有什么问题?我似乎对我的逻辑有问题。从表面上看,我有两个问题。1) 您的程序将返回1作为素数,这是不正确的。2) 您正在增加div,最终它将变为等于n(前提是n>2)。所以,如果(n==div){return-1;}将被执行,并且-1将被返回。不管怎样,我明白了,这是一个单独的问题。没错。忘了换了。谢谢你的洞察力。如果我在询问时做了任何错误的事情,请向mods道歉。仍然很新,我正在努力做到自给自足。欢迎访问stackoverflow.com:)更改变量n的名称,您将使用它两次。main方法的参数作为字符串和int变量。如果
isPrime
返回一个
布尔值,不是更好吗?返回1或-1不是很好的描述。是的,这肯定是更好的代码。但我通常会在事后修改这类内容。为了提高效率,不要一遍又一遍地重新计算
sqrt(n)
。顺便说一下,这些都是正确的观点,但它们不是问题的答案。