Array Bidimensional de objetos

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

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

Lind L. Tailor

Efectivamente, por favor, coloca el código con tus adecuaciones para ver el error, sin embargo, por lo que comentas posiblemente tienes esa línea de código en un bucle y si se repite el ID posiblemente es que no estas creando un nuevo objeto cuando insertas un nuevo registro.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos. Suerte!

Nafko

#11
Seria algo así pero ahora el problema esta en el ingreso de el 2do cliente al hacer la muestra por pantalla me tira error de los get y set algo esta mal pero no se que desde ya gracias

import java.io.*;
import java.util.*;

public class Test {
 
   
public static void main(String[] args) throws IOException {
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).getNombre() +
" RUT: " + llenarHashMap().get(id).getRUT() +
" Tipo de Sala: " + llenarHashMap().get(id).getSala()+
                                                       "Total"+llenarHashMap().get(id).getTotal());

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

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

public static HashMap<Integer,Conn> llenarHashMap() throws IOException{
           BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
           
HashMap<Integer,Conn> map = new LinkedHashMap<Integer,Conn>();
Conn a = new Conn();
a.setId(1);
               System.out.println("Nombre de Cliente: ");
               String nom=bf.readLine();
a.setNombre(nom);
               System.out.println("RUT: ");
               String rut=bf.readLine();
               a.setRUT(rut);
               System.out.println("Tipo de sala: ");
               String TipoSala=bf.readLine();
               a.setSala(TipoSala);
               System.out.println("Ingresar Total del valor: ");
               int total=Integer.parseInt(bf.readLine());
               a.setTotal(total);
map.put(a.getId(),a);



return map;
}
}


y Constructor

public class Conn {
private int id;
private String Nombre;
private String RUT;
private String Sala;
        private int total;

    public int getId() {
        return id;
    }

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

    public String getNombre() {
        return Nombre;
    }

    public void setNombre(String Nombre) {
        this.Nombre = Nombre;
    }

    public String getRUT() {
        return RUT;
    }

    public void setRUT(String RUT) {
        this.RUT = RUT;
    }

    public String getSala() {
        return Sala;
    }

    public void setSala(String Sala) {
        this.Sala = Sala;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }


}

Usuario Invitado

Veo mucha redundancia en tu código, llamas demasiadas veces a llenarHashMap() cuando debe llenarse solo una vez.

Código (java) [Seleccionar]
Map<Integer, Conn> conns = llenarHashMap();
printInfoOf(conns.get(generateInt(1, 3);

public static Integer generateInt(int minimun, int limit) {
    Random random = new Random(System.nanoTime());
    return minimun + random.nextInt(limit);
}
public static void printInfoOf(Conn conn) {
    System.out.println("ID: "+conn.getId()+"\nNombre: "+conn.getNombre()+
        "\nRUT: "+conn.getRUT()+"\nTipo de sala: "+conn.getSala()+"\nTotal: "+conn.getTotal());
}


Cada llamada a HashMap está ingresando nuevos datos. Debes de pensar en el flujo del algoritmo:

1) Ingreso los objetos Conn (ni idea de que trate de decir).
2) Generar un ID aleatorio.
3) Obtenerlo del Map.
4) Imprimir su información.

El punto 1, me lleva también a recomendarte que te leas el tema "Buenas prácticas en Java", que está pegado en éste mismo foro, para que aprendas que:

  • Las variables en Java utilizan notación camelCase. Ej. nroRut.

    Entre muchas otras cosas que todo programador Java debe saber.


    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

WHK

En java puro y duro también uso los HashMap, pero en el SDK de Android (en java) utilizo JSONObject porque es mas fácil e intuitivo para trabajar ya que no necesitas definir los tipos de valores como en HashMap<T, T>. No se si sea tu caso.

Usuario Invitado

#14
JsonObject del paquete javax.json, se usa más cuando se trabaja con WebSockets y Decoders/Encoders. En su caso, se haría:

Código (java) [Seleccionar]
JsonObject value = Json.createObjectBuilder()
    .add("id", VALOR)
    .add("nombres", "VALOR")
    .add("rut", "VALOR")
    .add("sala", "VALOR")
    .add("total", VALOR)
    .build();


Si lo ves más práctico, pues usalo en lugar de HashMap. Yo seguiría usando HashMap. Si quieres una llave multitipo, puedes usar <Object, Object>, que ya sería muy genérico y tendría que hacerse muchos casting, por lo que me inclinaría a usar JSON como dijo WHK.


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

WHK

A demás de ser mas cómodo el objeto JSON tiene muchas mas propiedades que un HashMap como por ejemplo la posibilidad de ser llevado a otras capas o lenguajes tales como javascript, solicitudes HTTP/POST directas sin tener que utilizar serializaciones ya que jsonobject lo hace de manera nativa, puedes pasarlo como valor serializable como transporte de datos entre capas de modelos y controladores de manera mas efectiva (como por ejemplo la posibilidad de retornar múltiples valores en ves de un solo tipo por función, como en mi caso cuando devuelvo un objeto json con el estado de la solicitud, valores y el id autoincrementable).

Un HashMap a pesar de que también puedes manejar arrays multidimensionales con llaves de tipos no puede ser transportado ni manipulado con tanta facilidad como un objeto json.

En mi caso en un proyecto php las funciones retornan un objeto de tipo array (ya que en php las llaves de los arrays pueden ser objetos como strings) el cual contiene el estado, namespace de error, texto de error y datos solicitados, de esa manera no necesito utilizar variables locales ni almacenar un stack de estados como se hace generalmente y uso una clase de errores para completar el id de estado, namespace y texto el cual puede contener un array de errores como por ejemplo el controlador del login de un acceso a un portal, pueden haber errores como por ejemplo que el campo nick falta o el campo nick y password falta o que le faltó la captcha, etc... entonces encapsulo todo en un ñunico objeto y lo retorno y lo proceso y lo documento dentro de la misma función.

En Java no hago esto xD porque java es mas estructurado pero si cuando necesito crear objetos serializables en el modelo utilizo mucho los valores en jsonobject para poder sincronizarlos con el servidor web desde una aplicación móvil ya que solamente debo serializarlos de manera nativa y enviar y recibir. Afortunadamente el objeto json está disponible en casi todo lenguaje de programación conocido tales como java, javascript, php, .net, etc por lo cual su utilización para mi es muy cómoda cuando se trata de crear un sistema que se deba mantener comunicado con otras capas u otros servicios y te sirve para acostumbrarte a su uso cuando necesites utilizar apis en internet como google maps, cuentas de gmail, apple, twitter, amazon aws, etc.

WHK

Cita de: Nafko en 20 Abril 2015, 07:55 AM
Seria algo así pero ahora el problema esta en el ingreso de el 2do cliente al hacer la muestra por pantalla me tira error de los get y set algo esta mal pero no se que desde ya gracias

Copia y pega acá el mensaje de error para tener una referencia mas clara.

Usuario Invitado

No importa qué es más cómodo, si no lo que mejor se adapte al proyecto. Yo cuando trabajo, siempre uso JSON o JAXB/Jackson cuando quiero transportar entidades y ésto es mucho más cómodo. Envías una entidad de microservicio a microservicio o mediante peticiones y ésta llega íntegra al destino, ya no necesitas estar convirtiendo de JSON a entidad. Un HashMap también es serializable por cierto.

Hay que usar siempre lo que mejor se adapte a las necesidades. Para casos sencillos como éste, no le veo mucho sentido usar JSON ya que no se va a trabajar con peticiones, si no que será estático, se está simulando una BBDD.

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

WHK

Acabo de compilar tu código y Gus Garsaky tiene razón, intentas pedir datos en una función y replicas en otras y luego sumas los ids no se para que, está bien raro el código. Podrías explicarnos de que se trata como para poder ayudar a corregirlo?

WHK

Cita de: Gus Garsaky en 21 Abril 2015, 14:56 PM
No importa qué es más cómodo, si no lo que mejor se adapte al proyecto. Yo cuando trabajo, siempre uso JSON o JAXB/Jackson cuando quiero transportar entidades y ésto es mucho más cómodo. Envías una entidad de microservicio a microservicio o mediante peticiones y ésta llega íntegra al destino, ya no necesitas estar convirtiendo de JSON a entidad. Un HashMap también es serializable por cierto.

Hay que usar siempre lo que mejor se adapte a las necesidades. Para casos sencillos como éste, no le veo mucho sentido usar JSON ya que no se va a trabajar con peticiones, si no que será estático, se está simulando una BBDD.

Saludos.

No, no está simulando una db, ese tipo de clases se llaman parcelables o serialización (método get, set) y sirven para ser transportados de manera nativa entre dos aplicaciones o capas, mantener orden y estándard:
http://www.discoduroderoer.es/metodos-get-y-set-en-java/

En .net el método { get; set; } se realiza de manera automática y ya viene con definiciones por defecto salvo que hagas get y set personalizados (útiles cuando necesitas realizar calculos cada ves que se guarda u obtiene un dato como por ejemplo obtener el sexo de una persona cuando solo tienes el valor booleano si es hombre o no o valor nulo).

El tema principal es que no entiendo la lógica del proyecto.