HOLA A TODOS ESPERO ALGUIEN ME PUEDA AYUDAR CON UN PROBLEMA QUE TENGO..
BUENO ESTOY REALIZANDO UNA MATRIZ DE 3X3 LA CUAL ME VA A GUARDAR SOLAMENTE NUMEROS PRIMOS... CUANDO SE INGRESE UN NUMERO DEBE VERIFICAR SI ES PRIMO O NO, SI ES PRIMO LO GUARDA EN LA MATRIZ SINO MANDA UN MESAJE DE QUE NO ES PRIMO Y VUELVE A PEDIR EL NUMERO MI CODIGO ES EL SIGUIENTE:
MUCHAS GRACIAS DE ANTE MANO SALUDOS :D
package numprim;
import java.util.*;
public class operacions {
int matriz[][]=new int[3][3];
int c,num,f,cl;
Scanner dato = new Scanner(System.in);
void sbprimo(){
f=0;
cl=0;
do{
System.out.println("Ingresa un numero primo");
num=dato.nextInt();
res();
if(res()==true){
matriz[f][cl]=num;
cl++;
c=0;
}else{System.out.println("no es primo");}
if(cl>2){
cl=0;
f++;
}
}while((f<3)&(cl<3));
}
public boolean res(){
for(int x=1;x<num;x++)
if(num%x==0)
c++;
if(c==2){
return true;
}else{
return false;
}
}
void muestram(){
for(f=0;f<3;f++){
for(cl=0;cl<3;cl++){
System.out.print(matriz[f][cl]);
}
System.out.println("");
}
}
}
--------------------------------------------------------------------
public class Numprim {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
operacions mm = new operacions();
System.out.println("Programa que almacena numeros primos");
mm.sbprimo();
mm.muestram();
}
}
dijiste lo que tienes y quieres pero no cual es el problema :s
Cita de: engelx en 8 Febrero 2013, 04:58 AM
dijiste lo que tienes y quieres pero no cual es el problema :s
A ok pasa que cuando ingreso solo numeros primos no hay problema, los guarda y me imprime bien la matriz.... pero si pongo un numero par me manda que nos es primo todo bien hasta ahora pero despues cuando ingreso otro numero no importa si es primo opar se cicla pidiendo que ingrese numeros nunca termina de pedir :P
no soy experto en java pero veo lo siguiente....
while((f<3)&(cl<3));
no deberias usar "&" sino "&&" ya que en java hasta donde recuerdo un & solo hace una operación en binario (por ejemplo 123 & 39 da 35)... en cambio && chequea el resultado y devuelve true o false... puede no se el factor pero nunca está de más hacelo bien porque ese "&" puede retornar valores inesperados (como null pointer exeption y locuras así...)
puedes poner algo como
System.out.println(f);
System.out.println(cl);
}while((f<3)&(cl<3));
y ve si están avanzando apropiadamente f y cl
por otro lado este tipo de operaciones está bien, pero recomiendo colocarle sus llaves "{ }" para asegurarte que no te equivocas en el control de flujo
for(int x=1;x<num;x++)
if(num%x==0)
c++;
por ultimo creo que este es tu error
x<num
for(int x=1;x<num;x++)
if(num%x==0)
c++;
ya que si ingresaste 5, el revisará del 1 al 4 (x < 5) asi que en un numero primo, c solo será 1 y nunca 2
lo ultimo que puedes usar es... para saber si un numero es primo, solo debes probar con los números enteros menores a su raíz cuadrada (si es entero e igual, entonces obviamente no es primo) y no es necesario contar el 1...
prueba esos cambios y avisas... yo mañana reviso es tarde para mi D: (1:30am)
Hola,
Soy principiante en Java también, pero tu código no hacía lo que querías. Tu forma de saber si un numero era primo o no era incorrecta.
Aquí te dejo tu código un poco retocado y comentado, trata de comentar lo mas posible tu codigo, asi cualquiera entendera exactamente lo que quieres hacer.
import java.util.Scanner;
public class operacions {
// creamos la matriz para almacenar los numeros primos
private int matriz[][]=new int[3][3];
private int num,f,cl; // creamos las variables numero, fila y columa
boolean permanencia = true; //creamos la variable de permanencia en el ciclo
Scanner dato = new Scanner(System.in);
void sbprimo(){
f=0; // inicializamos fila en 0
cl=0; // inicializamos columna en 0
// pedimos que se ingrese el primer numero
System.out.println("Ingrese numeros primos o 0 para salir");
num = dato.nextInt();
//si el numero ingresado es 0, imprimimos un mensaje de salida
if(num == 0)
{
System.out.println("No se ingresaron datos");
}
// si el numero ingresado es primo se hace el codigo correspondiente:
if(num!=0)
{
// hacemos un bucle do - while que se ejecutara mientras permanencia sea true.
do{
// le pasamos el numero ingresado por parametro al metodo 'res' para saber si es primo
res(num);
// si es primo, agregamos el numero ingresado a la fila '0' columna '0'
if(res(num)==true){
matriz[f][cl]=num;
cl++; // Y aumentamos columna en 1
// si no es primo, mostramos un mensaje para que se ingrese nuevamente el numero
}else{
System.out.println("No es primo. Ingrese nuevamente un numero o 0 para salir");
}
// pedimos nuevamente otro numero
num = dato.nextInt();
if(num == 0) // si el nuevo numero ingresado es '0', permanencia sera false,
// terminando así el procoeso
permanencia = false;
// si ya se han ingresado las 3 columnas en la fila actual
// aumentamos fila en 1 y reseteamos columna a 0
if(cl>2){
cl=0;
f++;
}
// cuando ya no haya filas para procesar, terminamos el proceso
if(f>2)
{
permanencia = false;
}
// este proceso se ejecutara solo si permanencia es true
}while( (permanencia == true));
}
// una vez qu acabe el proceso, imprimimos un mensaje de adios
System.out.println("\nHa decidido salir del programa. Adios");
muestram(); // e imprimimos los nuevos resultados
} // fin del metodo sbprimo
public boolean res(int numx){
int aux; // esta variable nos ayudara a saber si el numero es primo
for(int cont = 2; cont<numx; cont++)
{
aux = numx % cont; // guardamos en 'aux' el modulo del numero y contador
if(aux == 0)
return false; // si resulta que los numeros entre
// 1 y el numero-1, da residuo 0, devuelve false
}
return true; // si no, devolvemos true, indicando que es primo
} // fin del metodo
// mostramos los resultados de la nueva matriz
void muestram(){
System.out.println("\nResultados: \n");
// itera a travez de la matriz
for(f=0;f<matriz.length;f++){
// itera a traves de la fila actual
for(cl=0;cl<matriz[f].length;cl++){
System.out.print(matriz[f][cl]+" "); // imrpime la matriz
}
System.out.println(""); // nueva linea
}
} // fin del metodo
} // fin
Hola nuevamente a todos muchas gracias por los comentarios recibidos, ayer pude resolver el problema de manera parecida en que lo resolvió Randomized muchas gracias por el comentario y pues en un ratito mas les subo el programa como tal para que puedan ver como lo resolvi y casi de manera similar al de Randomized :D y mil gracias por las respuestas :P
Citar
package numprim;
import java.util.*;
/**
*
* @author jimmybibi
*/
public class operacions {
int matriz[][]=new int[3][3];
int c,num,f,cl;
Scanner dato = new Scanner(System.in);
void sbprimo(){
f=0;
cl=0;
do{
System.out.println("Ingresa un numero primo");
num=dato.nextInt();
res();
if(res()==true){
matriz[f][cl]=num;
cl++;
c=0;
}else{
System.out.println("no es primo");
c=0;
}
if(cl>2){
cl=0;
f++;
}
}while((f<3)&(cl<3));
}
public boolean res(){
for(int x=1;x<num;x++) {
if(num%x==0) {
c++;
}
}
if(c==2){
return true;
}
else{
return false;
}
}
void muestram(){
for(f=0;f<3;f++){
for(cl=0;cl<3;cl++){
System.out.print("["+matriz[f][cl]+"]");
}
System.out.println("");
}
}
}
------------------------------------------------------------------------
package numprim;
/**
*
* @author jimmybibi
*/
public class Numprim {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
operacions mm = new operacions();
System.out.println("Programa que almacena numeros primos");
mm.sbprimo();
mm.muestram();
}
}
]
Se ve bien. Podrías poner la salida del algoritmo? para ver su funcionamiento :)
Pd: Coloca los codigos entre code == java TU CODIGO /code.
code == java va encerrado entre [] y /code tambien.
esto:
while((f<3)&(cl<3));
Se simplifica a:
while(f<3); // iterará solo si hay filas que recorrer. Si f>=3, el bucle termina
Saludos.