Arreglo de objetos

Iniciado por Aida, 16 Marzo 2014, 06:29 AM

0 Miembros y 1 Visitante están viendo este tema.

Aida

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
Código (java) [Seleccionar]
[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"

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
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

#2
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:

Código (=java) [Seleccionar]

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).

Código (=java) [Seleccionar]

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.");

kasiko

no entiendo para nada la pregunta  :rolleyes:
Nos vemos...


Aida

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.
Código (java) [Seleccionar]
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;
String temp;
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("Menu");
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("MENU");
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("MENU");
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

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:

Código (=java) [Seleccionar]

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:

Código (=java) [Seleccionar]

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.

Aida

#6
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:
Código (java) [Seleccionar]
for(i=0;i<n||i<a;i++)
{

if(x[i].nombre.equals(temp))
{e=1;  

}
if(y[i].nombre.equals(temp)){
u=1;

}


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:

Código (=java) [Seleccionar]

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.