¿Cuál es la falla en este código de java (interesante)?

Bueno, estoy trabajando en un programa en netbeans el cual tiene como objetivo hallar el n-ésimo número primo, para lo cual escribí el siguiente código en java, el cual no al compilarse no presenta ningún error (listo para copiar y pegar en netbeans):
public class Primo {
    private int n,i,j,c=0,t;
    //Constructor
    public Primo(int n){
        this.n=n;
    }
    public int esPrimo(int x){
        for(i=1;i<=x;i++){
            if (x%i==0){
                c++;
            }
        }
        if (c<=2)
        { return 1;}
            else {return 0;}
        }
    public void imprimePrimo(){        
        for(j=2;     ;j++){
//bucle infinito
            t=0;
            if  (esPrimo(j)==1)
            {t++;}
        if (n==t) break;
}//fin del for
System.out.println("El número primo de orden "+n+" es "+j);
        }//fin  de método
            }//fin de clase
Como se ve, no tiene el método main, el cual está declarado en una clase aparte:
public class PrimoApli {
    public static void main(String [ ] args){
        Primo n= new Primo (5);//declaración del objeto
        n.imprimePrimo();
    }
}
El problema es que solamente funciona cuando n=1, y cuando tiene un valor mayor a este, no muestra resultado (como que se cuelga), he ahí el detalle, lo cual evidencia un error, quizás mal uso de los condicionales if o quizá en el mismo método de verificación de primos, en fin
si se pudiera proporcionárseme ayuda en esto, estaré muy agradecido
gracias de antemano, Roberto

1 Respuesta

Respuesta
1
Te paso la clase Primo modificada:
public class Primo {
private int orden;
//Constructor 
    public Primo(int orden){ 
        this.orden=orden; 
    } 
    public boolean esPrimo(int x){
    int c = 0;
        for(int i=1;i<=x;i++){ 
            if (x%i==0){ 
                c++;
                if (c>2) break;
            } 
        } 
        return c==2;
    } 
    public void imprimePrimo(){
    int t=0, resultado=0;
        for(int j=2; t<orden  ;j++){
        resultado=j;
        if (esPrimo(j)){
        t++;
        } 
        }//fin del for 
        System.out.println("El número primo de orden "+orden+" es "+ resultado); 
   }//fin  de método 
}
Muchísimas gracias por la respuesta, porque copio y pego en netbeans y ¡Funciona! Aunque fue algo completamente nuevo para mí el uso de dos variables en un mismo for y el empleo algo implícito del boolean, ya es algo que averiguaré personalmente, gracias de verdad

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas