Autor
|
Tema: Arreglo de objetos (Leído 4,462 veces)
|
Aida
Desconectado
Mensajes: 4
|
Hola que tal estoy haciendo un programa donde tengo que realizar una busqueda en dos arreglos diferentes de objetos pero me esta marcando error no se si tengan alguna sugerencia Aqui el codigo [code=java] System. out. println("Ingrese nombre del cliente a buscar"); temp=Leer.nextLine(); temp=Leer.nextLine(); for(i=0;i<n||i<a;i++) { if(x[i].nombre.equals(temp)){ e=1; } else if(y[i].nombre.equals(temp)) { u=1; } if(e ==1){System. out. println("Eliminado! "); n--;} else if(u==1) { System. out. println("Eliminado! "); a--; }
[/code] no me quiere entrar a ninguno de los else if solo me busca en el objeto "x"
|
|
« Última modificación: 16 Marzo 2014, 19:33 pm por Aida »
|
En línea
|
|
|
|
engel lex
|
no puedo responder a tu pregunta, pero te digo que, por favor para el código usa las etiquetas GeSHi en el editor de texto (a la derecha) para que sea más legible e indica cual error tienes exactamente (copy&paste del compilador) porque sin ello causa más trabajo buscarlo y ayudarte
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Mitsu
|
Dicho ya lo de engelx, etiqueta tu codigo entre los tags codigo: code==java y /code (ambos encerrados entre []). Ahora, si vas a evaluar dos valores para que usas else if? tendrias que usar dos if, ya que se pueden cumplir ambos y no necesariamente uno. Los if para eliminar las coincidencias deben estar fuera del loop, es decir, fuera del for ya que, no tienen ninguna dependencia del for, simplemente de e y u. Otra cosa, si vas a estudiar java estudia sobre POO. Sabras que el encapsulamiento es pilar en la construccion de aplicaciones, por lo que la forma: Objeto miObjecto = new Objecto(); miObjecto.propiedad = valor;
No es recomendable ya que, en un futuro cuando tengas un proyecto de muchas clases facilmente puedes cambiar el valor de las propiedades por error, y estar siempre propenso a ello. Por eso, la forma de acceder a las propiedades debe ser por medio de getters y setters (Leer al respecto). Objecto x = new Objecto(); String nombre1 = leer. nextLine(); String nombre2 = leer. nextLine(); for(byte i=0; i<n || i<a; i++) { if(x.getNombre().equals(nombre1)) e=1; if(x.getNombre().equals(nombre2)) u=1; } if(e ==1) System. out. println("Usuario elimimado."); if(u ==1) System. out. println("Usuario eliminado.");
|
|
« Última modificación: 16 Marzo 2014, 13:13 pm por Mitsu »
|
En línea
|
|
|
|
|
Aida
Desconectado
Mensajes: 4
|
Di a notar que soy demasiado nueva en esto, disculpen por lo del código y en realidad si estoy estudiando poo, pero apenas ando en inicios es de mis primeros programas. Aun sigue sin resolverse esto de antemano gracias. import java.util.Scanner; public class Sistema { static Scanner Leer =new Scanner (System. in); public static void main (String[]arg ) { int op, o,p; int a=0, n=0,i; int e=0; int u=0; Contado[] x=new Contado[5]; Credito[] y=new Credito[5]; for (i=0;i<5;i++) { x[i]=new Contado(); y[i]=new Credito(); } do{ System. out. println("1.Ventas de Contado"); System. out. println("2.Ventas a Credito"); System. out. println("3.Modificar"); System. out. println("4.Eliminar"); System. out. println("5.Salir"); op=Leer.nextInt(); switch(op) { case 1: do{ System. out. println("1.Agregar Venta"); System. out. println("2.Mostrar Ventas"); System. out. println("3.Regresar"); o=Leer.nextInt(); switch(o) { case 1: if(n<5) { x[n].Capturar(); n++; } else { System. out. println("Memoria llena"); } break; case 2: if(n>0){ for(i=0;i<n; i++) { x[i].Mostrar(); } } else{ System. out. println("No hay datos"); } break; case 3: break; } }while(o!=3); break; case 2: do{ System. out. println("1.Agregar Venta"); System. out. println("2.Mostrar Ventas"); System. out. println("3.Regresar"); p=Leer.nextInt(); switch(p) { case 1: if(a<5) { y[a].Capturar(); a++; } else { System. out. println("Memoria llena"); } break; case 2: if(a>0){ for(i=0;i<a;i++) { y[i].Mostrar(); } } else{ System. out. println("No hay datos"); } break; } }while(p!=3); break; case 3: System. out. println("Ingrese nombre del cliente a buscar"); temp=Leer.nextLine(); temp=Leer.nextLine(); for(i=0;i<n||i<a;i++) { if(x[i].nombre.equals(temp)) {e=1; } if(y[i].nombre.equals(temp)){u=1; } } if(e==1){ System. out. println("Existe! "); x[i].Modificar(); } if(u==1) { System. out. println("Existe! "); y[i].Modificar(); } else{ System. out. println("No tengo ese dato"); } break; case 4: System. out. println("Ingrese nombre del cliente a buscar"); temp=Leer.nextLine(); temp=Leer.nextLine(); for(i=0;i<n||i<a;i++) { if(x[i].nombre.equals(temp)) e=1; if(y[i].nombre.equals(temp))u=1; } if(e==1) System. out. println("Eliminado! "); n--; if(u==1) System. out. println("Eliminado! "); a--; /*else{ System.out.println("No tengo ese dato"); }*/ } }while(op!=5); } }
El programa me crashea a la hora de entrar en el caso 3 o 4 con el error java.lang.NulPointerExceptionl
|
|
|
En línea
|
|
|
|
Mitsu
|
Hola, una excepción NullPointerException se lanza cuando se está intentado acceder a una variable/objeto que no ha sido inicializado, es decir, que su valor es null. No dices en qué línea te marca la excepción, pero quizás la excepción se lanza cuando intentas comparar lo ingresado con la propiedad de tu clase, cuya propiedad quizás aún no está inicializada. Recuerda que, un objeto, es único y tiene una copia individual de cada propiedad. Al hacer tú lo siguiente: Contado[] x = new Contado[5]; Credito[] y = new Credito[5]; for(byte i=0; i<5; i++) { x[i] = new Contado(); y[i] = new Contado(); }
Supongo que Contado y Crédito tienen ya propiedades pre-establecidas, para que puedas comparar lo ingresado (temp = leer.nextLine()) con las propiedades de los objetos. Ej: public class Contado { public String nombre = "Chimpandolfo"; // MAL! Nunca una propiedad debe ser pública. (Encapsulamiento) // demás propiedades y métodos.. }
Si no es así, es por ello que te lanza el NullPointerException, porque estarías comparando un String con un null, ya que String es una clase y nombre vendría a ser un objeto String y, al no inicializarlo, como todo objeto sin inicializar, por defecto tendrá el valor null. Saludos.
|
|
|
En línea
|
|
|
|
Aida
Desconectado
Mensajes: 4
|
El error esta en la linea 115, lo hice por separado, es decir solo accediendo a la propiedad nombre de uno de los objetos y todo bien, el problema viene cuando intento comparar esa propiedad en los dos objetos . el Error lo marca aqui: for(i=0;i<n||i<a;i++) { if(x[i].nombre.equals(temp)) {e=1; } if(y[i].nombre.equals(temp)){ u=1; }
|
|
« Última modificación: 16 Marzo 2014, 22:35 pm por Aida »
|
En línea
|
|
|
|
Mitsu
|
La verdad no puedo ver bien tu código ya que estoy en el móvil. Pero ya que el error te lo marca allí, haz lo siguiente. Dentro del for, en la primera línea imprime el valor de temp y el nombre del objeto actual: System. out. println("temp vale:\t" + temp + "Nombre:\t" + x [i ]. nombre);
Comenta los if para solo visualizar el contenido de temp y de los nombres. Si gustas agrégame al skype que estoy conectado allí: mitsu.g Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Arreglo Dinamico con Objetos :S
Java
|
Xephiro
|
9
|
14,481
|
6 Marzo 2009, 20:20 pm
por juancho77
|
|
|
arreglo de objetos sin variables globales
Java
|
gibi77
|
4
|
4,668
|
12 Octubre 2011, 10:45 am
por Debci
|
|
|
Crear un arreglo de objetos con el constructor
Programación C/C++
|
ThronerAXE
|
1
|
1,916
|
16 Febrero 2014, 18:38 pm
por eferion
|
|
|
segmentation al ordenar un arreglo de objetos
Programación C/C++
|
yeah_2796
|
0
|
1,766
|
19 Mayo 2015, 22:51 pm
por yeah_2796
|
|
|
Como puedo serializar un arreglo de objetos en java
Java
|
Soul_Eater
|
4
|
4,273
|
9 Mayo 2017, 02:58 am
por Soul_Eater
|
|