Duda lista de de datos y objetos

Iniciado por Dem0ny, 6 Marzo 2009, 11:49 AM

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

Dem0ny

Bien, estoy haciendo un programa que solicita al usuario una serie de datos y con cada uno de estos, tomando uno de ellos como referencia, crea un objeto.

El problema es el siguiente, usando un bucle yo creo tantos objetos como datos introduzca el usuario, pero, cuando el usuario acabe de introducir todos los datos, quiero que imprima, los datos y operaciones efectuadas en cada nueva clase por separado.

No sé como hacerlo ya que los objetos estan creados en un bucle y no tengo la certeza de cuantos son, como podría declarar una clase independiente para cada uno de ellos y que imprima el valor de las operaciones que deba hacerse en cada uno.

PD. Las operaciones en cada uno de los objetos que se deben crear, son las mismas.

Un saludo! Agradecería muchisimo una orientación, simplemente una idea de como podría hacerlo,  porfavor, no pongais codigos. Gracias de antemano.


er_rafael_rafi

Seria interesante que crearas alguna clase que guardara los datos y ademas la referencia al objeto que le sigue en la lista...

Dem0ny

algo asi como listas enlazadas tomando como referencia el dato principal con el que creo el objeto o clase?


Saludos

juancho77

A ver si entendí:
por ejemplo el usuario ingresa datos sobre autos: color, marca, numero de puertas, etc. Creas un objeto de tipo auto x veces, según decida el usuario. Luego quisieras mostrar esta información.
Puedes usar un vector para ir guardando los objetos creados. El vector es una clase similar a un arreglo, pero es autodimensionable (el numero de objetos que contendrá no esta definido en un principio) y tiene métodos interesantes que te permitirán recuperar datos sobre los objetos.

Citaroperaciones efectuadas en cada nueva clase por separado.

Eso no me queda claro. Ademas, cuando dices clases te estas refiriendo a objetos? Sino esto no tiene sentido:

CitarNo sé como hacerlo ya que los objetos estan creados en un bucle y no tengo la certeza de cuantos son, como podría declarar una clase independiente para cada uno de ellos y que imprima el valor de las operaciones que deba hacerse en cada uno.

Dem0ny

Si, juancho, perdón, me expliqué fatal, intentaré explicarlo de nuevo :) :

Con el ejemplo de los autos, por ej. : El usuario debe interactuar con el programa para introducir X nombres de autos, tantos como el usuario desee. He pensado usando un for, crear un objeto por cada nombre de coche que introduzca. Bien, aparte del nombre del coche, deberá introducir otra serie de datos de cada uno de los coches. Cuyos datos se añadiran al objeto (nombre del coche) y finalmente, el programa imprimirá cada objeto y propiedades por separado, es decir una especie de lista con con sus propiedades y demás. Ejemplo:

  Introduce coche (for) ------> Ferrari----->rojo ----> con llantas
  Introduce coche (for) ------> Ford ---->azul------> con tapacubos
  Introduce coche (for) ------> BMW ---->verde ----> con llantas

Se crearán 3 objetos tomando como referencia el nombre del coche y que poseerán las propiedades de color y  estetica de las ruedas (llantas o tapacubos).

Mi duda, es, una vez creados los objetos con el for, como los guardo independientemente sus datos para luego imprimirlos. Nose si me explico correctamente. Como distinguirlos para imprimirlos finalmente.

En teoria crearia los objetos tipo

Código (java) [Seleccionar]
Coche coche_i = new Coche (Nombre, color, llantas)


P.D. Evidentemente mi programa no lo aré sobre Coches, por tanto en cada objeto se realizarán una serie de operaciones matemáticas. De tal modo que por eso necesito independientes.

P.D.2. No quiero que se impriman segun vayan introduciendo datos, por que entonces, no tendria gracia. Si no, imprimir una vez haya terminado todo el almacenaje de datos por parte del usuario.

Un Saludo! Espero haberme explicado bien, cualquier duda preguntenme :) Gracias de antemano

juancho77

Claro, ahora si te entiendo.
Cuando creas un objeto en tiempo de ejecución, debes ligarlo a otro objeto que funcione como contenedor digamos. Esto es porque la variable asociada no esta registrada al objeto (no es una variable de clase) sino temporal. Por eso te decía que uses un objeto Vector.
Otra duda: el programa esta pensado para linea de comandos? Por eso dices de usar un for?

suponiendo esta declaración de Vector:

Código (java) [Seleccionar]
Vector datos = new Vector(10,10);

podemos usar esto:
Código (java) [Seleccionar]

boolean repetir=true;
while (repetir)
{
String marca= //leer un dato de consola;
int ruedas= //leer otro dato;
int modelo= //leer otro dato;
datos.add(new Auto(marca, ruedas, modelo));
System.out.println("¿Ha finalizado de ingresar datos? S - N ");
char respuesta= //leer un caracter;
if (char=='S')
repetir=false;
}


Vector contiene Object. Por eso podemos añadir el objeto que creamos en ejecución de tipo Auto. Por herencia, todos los objetos son Object.
Para recuperar datos, como sabemos que todos los que contendremos seran de tipo Auto, no hay drama con el casting. Recorremos el Vector como si fuera un Arreglo, haciendo elc asting de Object a Auto:

Código (java) [Seleccionar]
for (int i=1; i<datos.size(); i++)
{
Auto temporal= (Auto)datos.elementAt(i); //casting
System.out.println("Auto Nº:" + i);
System.out.println("  Modelo:" + temporal.obtenerMarca());
System.out.println("  Cant de Ruedas:" + temporal.obtenerRuedas());
System.out.println("  Año:" + temporal.obtenerAno());
System.out.println("--------------");
}


Dem0ny

Puaf, genial muchisimas gracias. Ya tengo mas o menos la idea general de como hacerlo. Solo tengo un par de dudas encuanto a tu post:

-En cuanto a la declaración del objeto datos, porqué (10,10)?

-En cuanto al codigo final escrito. "temporal.obtenerMarca()". Me he liao con esto, nose se ma pirao la cabeza jeje


Por lo demás, te e comprendido perfectamente se trata de la creación de un objeto vector, que a su vez almacena otros objetos de tipo Auto (con sus propiedades) y posteriormente, con un bucle recorrer la lista que esta compuesta por Vector.

En resumen, si lo entendí bien se trata de una lista(vector) formada por los distintos autos que el usuario introduce y sus correspondientes propiedades.

-Ramc-

Te recomiendo usar ArrayList u otra clase de el api collections porque Vector ya está desactualizada, ArrayList es la renovación directa de Vector, pero, puedes ver que otras hay.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

juancho77

Claro, lo que tu llamas Lista yo lo llamo Arreglo. Un Vector es una clase que proporciona Java que emula una lista y brinda servicios predefinidos para agilizar el trabajo.

Aqui tienes toda la información sobre la clase VECTOR.

Te puedo adelantar que existe un constructor para Vector con dos parametros, el primero un int que indica la cantidad de elementos que podra alojar en un principio el vector, y el segundo parametro, otro int, que indica de cuanto sera el incremento una vez que el vector se llene. El objeto Vector es redimensionable. Por eso llamo al constructor con (10,10).

Citar-En cuanto al codigo final escrito. "temporal.obtenerMarca()". Me he liao con esto, nose se ma pirao la cabeza jeje

Aqui estoy suponiendo que la clase Auto tiene un servicio "obtenerMarca()" que devuelve un String con la marca del automovil. temporal es la variable Auto que almacena el Objeto que recuperamos del Vector. Por eso hago ese llamado. Obviamente deberas cambiarlo por el servicio que tu desees segun la clase que uses.

Un saludo.

sapito169

Cita de: er_rafael_rafi en  6 Marzo 2009, 17:52 PM
Seria interesante que crearas alguna clase que guardara los datos y ademas la referencia al objeto que le sigue en la lista...

omg eso se creo ase varios años en las primeras versiones de java y es recontra conosiodo
Vector y arraylist y ay otros mas