Array Bidimensional de objetos

Iniciado por Nafko, 15 Abril 2015, 22:14 PM

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

Nafko

Hola...

Quisiera saber como puedo ingresar objetos a una matriz, y después imprimirlos es una lista pero eso es mas fácil por medio de un ciclo, lo que me complica es como crear la matriz para que guarde por ejemplo el nombre, rut, tipo sala de cine, y precio (String, String (por los puntos y el guion), String, Int) y todo eso por medio de métodos.

Desde ya muchas gracias :)

Lind L. Tailor

Hola...

Por lo que entendí necesitas crear una simple lista de objetos, si ese es el caso puedo ayudarte con un código sencillo pero útil, solo tendrías que adecuarlo a tus necesidades...

Objeto.
Código (java) [Seleccionar]

public class PojoA {
private String Campo1;
private String Campo2;
private String Campo3;

public String getCampo1() {
return Campo1;
}

public void setCampo1(String campo1) {
Campo1 = campo1;
}

public String getCampo2() {
return Campo2;
}

public void setCampo2(String campo2) {
Campo2 = campo2;
}

public String getCampo3() {
return Campo3;
}

public void setCampo3(String campo3) {
Campo3 = campo3;
}
}


Main.
Código (java) [Seleccionar]

public class ClaseMain {
public static void main(String[] args) {
for (PojoA i : llenarLista()){
            System.out.println("NOMBRE: " + i.getCampo1() + " APELLIDO: " + i.getCampo2() + " ANIME: " + i.getCampo3());
        }
}

public static List<PojoA> llenarLista(){
List<PojoA> list = new ArrayList<PojoA>();
PojoA a = new PojoA();
a.setCampo1("Yuno");
        a.setCampo2("Gasai");
        a.setCampo3("Mirai Nikki");
        list.add(a);
       
        a = new PojoA();
        a.setCampo1("Asuna");
        a.setCampo2("Yuuki");
        a.setCampo3("Sword Art Online");
        list.add(a);
       
        a = new PojoA();
        a.setCampo1("Hinata");
        a.setCampo2("Hyuga");
        a.setCampo3("Naruto");
        list.add(a);
       
        return list;
}
}


Primeramente lo que hacemos es crear una clase el cual contendrá todos los campos que necesitemos, para este ejemplo los eh declarado del tipo String pero tu puedes declararlos de acuerdo a tus necesidades, para cada campo creamos sus respectivos métodos Set/Get los cuales son los métodos encargados de manipular el contenido que tendrá el campo, todo esto lo podrás ver en la clase PojoA.

Posteriormente hice un método el cual me retornara una lista del tipo PojoA, dentro del método instanciamos a mi objeto para ir colocando los valores a través de los métodos Set cuando termino de colocar los valores a los campos los agrego a una lista, instancio un nuevo objeto para volver a llenar con valores nuevos ya que sino el valor sera el mismo para todos, el proceso se repite una vez mas con el fin de tener dentro de mi objeto 3 registros en total.

Finalmente retorno la lista y al ejecutar mi proyecto, recorro la lista de acuerdo al tipo de objeto al que pertenece; es decir, no puedo recorrer una lista de objetos del tipo PojoB cuando mi lista es del tipo PojoA, e imprimo los valores a través de los métodos Get.

Cualquier duda y/o inconveniente, aquí estamos. Suerte!

Nafko

 ;-) ;-) ;-) ;-) ;-)

Muchas gracias en tal caso no hay necesidad de crear una matriz, solo un vector pero si tengo que seleccionar por medio de un random a 10 clientes con sus respectivos datos como lo aria en ese caso, tendría que crear una matriz para poder seleccionar los 10 clientes y mostrarlos por pantalla, por ese motivo además para hacer la suma total de ingreso diario y mensual.

Creo que si necesito una matriz de objetos para poder seleccionar y sumar los datos.

Lind L. Tailor

Hola...

Pues eso no le veo problema, solo que tendríamos que cambiar la Interface a implementar...

PojoA
Código (java) [Seleccionar]

public class PojoA {
private int id;
private String Campo1;
private String Campo2;
private String Campo3;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getCampo1() {
return Campo1;
}

public void setCampo1(String campo1) {
Campo1 = campo1;
}

public String getCampo2() {
return Campo2;
}

public void setCampo2(String campo2) {
Campo2 = campo2;
}

public String getCampo3() {
return Campo3;
}

public void setCampo3(String campo3) {
Campo3 = campo3;
}
}


Main
Código (java) [Seleccionar]

public class ClaseMain {
public static void main(String[] args) {
Random  rnd = new Random();
int id = rnd.nextInt(3)+1;
int size = llenarHashMap().size();
int total = 0;
System.out.println("Id: " + llenarHashMap().get(id).getId() +
" Nombre: " + llenarHashMap().get(id).getCampo1() +
" Apellido: " + llenarHashMap().get(id).getCampo2() +
" Anime: " + llenarHashMap().get(id).getCampo3());

for(int i = 1; i <= size; i++){
total += llenarHashMap().get(i).getId();
}

System.out.println("TOTAL: " + total);
}

public static HashMap<Integer,PojoA> llenarHashMap(){
HashMap<Integer,PojoA> map = new LinkedHashMap<Integer,PojoA>();
PojoA a = new PojoA();
a.setId(1);
a.setCampo1("Yuno");
                a.setCampo2("Gasai");
                a.setCampo3("Mirai Nikki");
map.put(a.getId(),a);

a = new PojoA();
a.setId(2);
a.setCampo1("Asuna");
                a.setCampo2("Yuuki");
                a.setCampo3("Sword Art Online");
map.put(a.getId(),a);

a = new PojoA();
a.setId(3);
a.setCampo1("Hinata");
                a.setCampo2("Hyuga");
                a.setCampo3("Naruto");
map.put(a.getId(),a);

return map;
}
}


Como podemos observar, en vez de implementar la Interface List cambiamos a un HashMap que a su vez hereda de la clase Map siendo esta la clase padre, sin embargo, eh leído que HashMap tiene un poco mas de rapidez cuando se trata de gran cantidad de datos, aunque sigo buscando una diferencia que me convenza. Cabe mencionar que la característica importante que tiene nuestro elemento en particular es que se caracteriza por su estructura; HashMap (K,V), donde K significa nuestro identificador (Key) que tendrá V (value) que viene siendo el valor correspondiente a ese Key. Para mayor información te invito a consultar la API de Java para que puedas comprender con mejor claridad.

También realice un cambio a nuestro objeto ya que agregue un campo mas el cual es el identificador (Id) como podrás ver en la clase PojoA, además realice un cambio a nuestro método el cual me retornara un HashMap<Integer,PojoA>, esto significa que como Key le declaro un entero y como valor le declaro un objeto. Posteriormente llenamos el K y el V correspondiente como puedes ver en el código.

Finalmente, solo es cuestión de generar un numero aleatorio entre 1 al 3, la razón de sumarle un 1 al final es porque sino nos genera números del 0 al 2. Pasamos a imprimir el valor correspondiente de acuerdo al numero que el HashMap identificara como Key. Como ya lo que tiene V es un objeto lleno, entonces puedo acceder a los valores de el mediante los métodos Get.

Para tu problema de la suma, yo estoy sumando el ID pero obviamente tu sumarías el valor que tengas que sumar, el proceso es simple ya que como puedes ver es simplemente un bucle for y acceder a los valores que tiene el campo que voy a sumar de acuerdo al K que le voy a pasar.

Cualquier duda y/o inconveniente, aquí estamos. Suerte!

Nafko

Gracias de verdad me ayudaste mucho cualquier duda o sugerencia ya se donde plantearla  :silbar:


Nafko

Ola sabe tengo una duda para poder rellenar los campos manualmente. Al ingresar por teclado porque lo intente de esta manera pero no sirvió.

       

System.out.println("Ingresar nombre de Cliente: ");
String nom=bf.readLine();
a.setCampo1(nom);


Nafko

Me hace ingresar 4 veces los usuarios y me manda un id 1 siempre :(

Usuario Invitado

Coloca el código donde muestra el error. Importante es dedicarse a leer el rastreo de pila que bota el compilador que para eso está, para leerlo.


Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Nafko

#8
No me tira ningún error al ingresar los datos solo me hace ingresar 4 veces los usuarios y tira siempre un id de 1 creo que no hay donde leer  ;-)

Usuario Invitado

¿Y el código? No sé si has editado el código que te han dado
. Si es así, colócalo (entre etiquetas de código) para ver el flujo del algoritmo y poder ver el error.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein