He intentado buscar preguntas similares para ver si la respuesta podría estar en este sitio en vano. Actualmente estoy tratando de escribir un programa que determine si la entrada del usuario es un número primo utilizando un método recursivo. El problema es que no compilará la variable "n" que ya está definida en el ámbito. No entiendo muy bien qué significa el compilador. Heres es mi código

/**
 * 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);}
    }
}
-1
Andrew Garcia 1 abr. 2017 a las 20:32

2 respuestas

La mejor respuesta

'n' es una variable duplicada. Lo está utilizando tanto en int n; como en String[] n Renombrar String [] n a n1 o algo

0
opensam 1 abr. 2017 a las 17:37

Si comienza en 2, solo necesita verificar hasta la raíz cuadrada de n para una mejor eficiencia. Además, como ya se dijo, cualquier número por debajo de 2 no es primo.

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);
    }
}
0
eddy_b 1 abr. 2017 a las 18:07