Program java numeros primos

Iniciado por painkillerpucela, 14 Noviembre 2008, 22:44 PM

0 Miembros y 2 Visitantes están viendo este tema.

painkillerpucela

Buenas a todos, es la primera vez que me paso x aki, asi que ya os ire conociendo poco a poco.
Mi duda es sobre un programa en java que me tiene que decir si un numero es primo o no, el caso es que me funciona bien excepto con el 2 y el 3, seguro que es una chorrada pero no lo veo.
Bueno aqui os dejo el codigo:
public class Ej_5
{
   public static void main (String[]args)
   {

      if (args.length ==0)
      {      
         System.out.println("Introduzca al menos un argumento");
      }
      else
      {
         
         int numero=0; boolean es_primo; int j;
         numero=Integer.parseInt(args[0]);

         es_primo=1;
              j = 2;
              while((es_primo==1) && (j<numero) )/* Si es divisible por otro numero no es primo */
         {
                  if( numero%j==0 )
            {   
                           es_primo==false;
                        j=j+1;
                 }
                 if( es_primo=true)
            {
               System.out.println(numero+ "es primo \n");
            }
            else
            {
               System.out.println(numero+ "no es primo \n");
            }
         }
      }
   }
}         
         
Bueno espero que me podais ayudar.
Bye!!

WannaBeHacker

#1
Para empezar, es un caos de código, acostúmbrate a programar con un orden, sentencia por línea y esas cosas...

Código (java) [Seleccionar]

public class Primo {

    public static void main(String[] args) {

        if (args.length == 0) {
            System.out.println("Introduzca al menos un argumento");
        } else {

            int numero = 0;
            boolean es_primo;
            int j;
            numero = Integer.parseInt(args[0]);

            es_primo = 1;
            j = 2;
            while ((es_primo == 1) && (j < numero))/* Si es divisible por otro numero no es primo */ {
                if (numero % j == 0) {
                    es_primo==false;
                       
                    j = j + 1;
                }
                if (es_primo = true) {
                    System.out.println(numero + "es primo \n");
                } else {
                    System.out.println(numero + "no es primo \n");
                }
            }
        }
    }
}     


Y lo segundo, aquí: es_primo = 1; quieres meter un entero en una variable declarada como booleana.

Flakito81

#2
Yo sinceramente dudo que eso funcione, y que conste que no lo he probado. Aparte del problema con el tipo de datos con la variable es_primo que ya comentó WannaBeHacker, veo el siguiente trozo que me llama la atención:
Código (java) [Seleccionar]

if (numero % j == 0) {
    es_primo==false;

     j = j + 1;
}

según eso la variable j no se incrementa al no ser que el numero sea no_primo, y para ser más concreto, j no se incrementa si el numero es diferente de multiplo de dos. Lo correcto sería tener el if sólo para cambiar el estado de la bandera (es_primo) y la j se incrementa siempre o si te gusta liar mas el codigo pones un else e incrementas la j. Sin salir de ese trozo de código recordarte algo básico casi que del prescolar de la programacion:
= asignacion
== comparacion
asi que es_primo == false no es correcto. Al igual que if (es_primo = true) tmp lo es
.Lo dicho, corrige eso y pon más atención ;)


Saludos!

PD: mira el abre llave del while que WannaBeHacker lo elimino sin querer

sapito169

en primer lugar tu variable es primo es boolean
esta mal que le das un valor entero

en segundo lugar primero compruebas si es primo con el while y despues muestras el mensaje

segun tu algoritmo tu muestrarias varias veces el mensaje es primo

juancho77

ALGORITMO
si (numero mod 2 = 0) or (numero mod 3 = 0)
  entonces es_primo<-- true
sino
  para (x desde 2 hasta numero -1 mientras es_primo=true)
    si (numero mod x=0)
      es_primo=false
if (es_primo) mostrar valor.



Algo asi? Es sencillo. Solo debes considerar los casos bases 2 y 3. Obviamente, el 1 es primo y el 0 depende de la teoria donde hayas estudiado. Si son enteros negativos le aplicas math.abs y listo. Saludos.
   

painkillerpucela

Muchas gracias a todos por vuestro interes. De todas formas os pido perdon si he metido mucho la gamba ya que estoy aprendiendo java, voy a volver a reescribir el ejercicio y a tener en cuenta las anotaciones que me habeis dicho.
Venga un saludo a todos y si me surge algo nuevo ya me paso por aqui
Bye!!!

painkillerpucela

Bueno aqui os dejo el programa corregido otra vez, pero me sigue haciendo lo mismo, ahora me funciona con todos los numeros excepto con el 2(me dice que no es primo) y el 4 (me dice que es primo). A ver si me podeis decir que es lo que esta mal
public class prueba
{
   public static void main (String[]args)
   {

      if (args.length ==0)
      {      /*Comprueba si le pasamos al menos un argumento*/
         System.out.println("Introduzca al menos un argumento");
      }
      else
      {
         int numero=0;int j=2; int primo=1;
         numero=Integer.parseInt(args[0]);

         if(((numero%2)==1)||((numero%3)==1)))
         {
            primo=1;
            j=j+1;
         }
            
         else
         {
            primo=0;
         }
         
         if (primo==1)
         {
            System.out.println(numero+ "es primo \n");
         }
         else
         {
            System.out.println(numero+ "no es primo \n");
         }
      }
   }
}

Venga un saludo y mxas gracias!!!

Sp1D3rXxX

a ver si te funciona a mi me va mu bien:

Código (java) [Seleccionar]
public class ClasePrimo
{
public static void main(String[] args)

{
int n=0,d=1;
int N=0;
System.out.print("Introduzca el numero : ");
N=ClaseLectura.leerInt();
do
{
if(N%d==0)
{        
n=n+1;
}
d=d+1;
}
while(d<=N);
if(n==2)
{
System.out.println("Es primo");
}
else
{
System.out.println("No es primo");
}
}
}

^Tifa^

Yo no se Java (Apenas aprendiendo)

Pero creo que igual esto te serviria :


class aplicacion {

public static void main(String[] args) {

Scanner x = new Scanner(System.in);

int numero;

System.out.println("Inserte un numero!");
numero = x.nextInt();

int contador;

for ( contador = 0; contador <= numero; ++contador ) {
if ((contador%2) == 0) {
System.out.println("Es un numero primo "+contador);
} else {
System.out.println("No es un numero primo "+contador);
}
}
}
}


43H4FH44H45H4CH49H56H45H

Cita de: ^TiFa^ en 26 Noviembre 2008, 20:29 PM
Yo no se Java (Apenas aprendiendo)

Pero creo que igual esto te serviria :


class aplicacion {

public static void main(String[] args) {

Scanner x = new Scanner(System.in);

int numero;

System.out.println("Inserte un numero!");
numero = x.nextInt();

int contador;

for ( contador = 0; contador <= numero; ++contador ) {
if ((contador%2) == 0) {
System.out.println("Es un numero primo "+contador);
} else {
System.out.println("No es un numero primo "+contador);
}
}
}
}



Primero deberias tomar un curso de algoritmos, entender como se comporta una sentencia de control de flujo (en este caso el bucle con for), en este y en la mayoria de los lenguajes.
- Me quedo la duda al ver este codigo
que entiendes por numero primo?

Sp1D3rXxX while(d<=N); no está bien aplicado fijate en el concepto de número primo y verás que tienes cosas demás.

Y el resto de códigos  :laugh:

Código (java) [Seleccionar]
// NetBeans 5.5
package primo;
import java.io.*;
public class Main {
   
    public Main() {
    }
   

    public static void main(String[] args) {
       
            BufferedReader tec;
            String leer;
            int num;
            int cont;
            tec = new BufferedReader( new InputStreamReader(System.in) );   
            try
            {           
            System.out.print("Ingrese numero: \n");                                 
            leer = tec.readLine();
            num = Integer.parseInt(leer);           
            if(num > 1)
            {
            cont = 0;
            for(int nu = 2; nu < num; nu++){               
                if(num % nu == 0)
                {
                System.out.print("NO ES PRIMO\n");
                cont = 1;
                break;
                }
            }
            if (cont == 0)  System.out.print("ES PRIMO\n");           
            }
            else if (num == 1) System.out.print("ES NUMERO UNITARIO\n");
            else System.out.print("NUMERO INVALIDO\n");
            }           
           
            catch(Exception e)
            {
                System.out.print("error: " + e.toString());
            }

    }
   
}


Bueno esto lo hice de a la rapida, falta agregar varias cosas y mejorar el algoritmo, pero para darse idea de lo que menciono sirve de ejemplo.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W