Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > numeros primos

Hola, resulta que me piden que haga una aplicacion, en donde el usuario ingresa un numero y luego tiene que salir un cuadro diciendo si el numero ingresado es un numero primo o no.

Estoy aprendiendo a usar if, while, switch, do while.

Aquí les dejo el código que hice:

int numero;
int contador=2;
numero =Integer.parseInt(JOptionPane.showInputDialog("Ingrese numero"));

while (numero % contador != 0 && contador<numero)
{contador++;
JOptionPane.showMessageDialog(null,"es primo");
}
}

}

El problema que tiene mi codigo es que al ingresar un numero primo, me aparece un cuadro diciendo que es primo repetidas veces, cuando solo quiero que me aparezca el cuadro solo una sola vez.
Por ejemplo, si ingreso el numero 7 (primo), me sale el cartel diciendo que es primo 5 veces.

La verdad es que no sé como seguir.
Alguna ayuda?

Saludos

junio 11, 2014 | Registered Commenterfernando143

Tienes ese JOptionPane dentro de un bucle, así que saldrá tantas veces como iteraciones.

public class NewMain {

public static void main(String[] args) {
if (esPrimo(Integer.parseInt(JOptionPane.showInputDialog("Ingrese numero")))) {
JOptionPane.showMessageDialog(null, "es primo");
}
}

private static boolean esPrimo(int numero) {
boolean primo = true;
if (Math.abs(numero) != 2) {
if (numero % 2 == 0) {
primo = false;
} else {
for (int i = 3; i * i <= numero; i += 2) {
if (numero % i == 0) {
primo = false;
break;
}
}
}
}
return primo;
}
}

junio 11, 2014 | Registered Commenterchoces

y como tendría que hacer para que me diga que no es primo?

junio 11, 2014 | Registered Commenterfernando143

Ese método devuelve true si es primo, y false si no lo es.

junio 11, 2014 | Registered Commenterchoces

Ah, porque puse el numero 6 que no es primo, y no me devolvió nada

junio 11, 2014 | Registered Commenterfernando143

if (esPrimo(Integer.parseInt(JOptionPane.showInputDialog("Ingrese numero")))) {
JOptionPane.showMessageDialog(null, "es primo");
}else{
JOptionPane.showMessageDialog(null, "no es primo");
}
}

junio 11, 2014 | Registered Commenterchoces

Ah, ok ahora si sale, pero te pregunto, se puede hacer solamente con while?

junio 11, 2014 | Registered Commenterfernando143

Supongo que podría hacerse. Ya tienes en ese método la manera de determinar si un número es primo.
De todos modos, es mejor tener ese tipo de soluciones en métodos, porque así pueden utilizarse donde convenga.

junio 11, 2014 | Registered Commenterchoces

Si probarlo y modificando directamente sobre tu mismo codigo, diria que con un while se podria hacer de una forma similar a esta:

boolean esPrimo = false;
while (!esPrimo && contador<(numero/2)) {
if (numero % contador++ == 0)
esPrimo = true;
}

if (esPrimo) {
JOptionPane.showMessageDialog(null,"es primo");
}

Un saludo

junio 12, 2014 | Unregistered CommenterUnoPorAhi