Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Shakos en 11 Abril 2011, 21:15 pm



Título: Dificultades en Java
Publicado por: Shakos en 11 Abril 2011, 21:15 pm
Estoy haciendo un programa de bastante complicacion , al menos para mi nivel en Java el caso es que es como un periodico.Una breve explicacion de lo que debe pasar en el programa, el usuario puede añadir "trabajadores del periodico", los he guardado en un ArrayList hasta aqui todo bien , sigue de la siguiente manera, cada vez que el usuario escriba el nombre de uno de estos trabajadores se debe activar su columna si es que han publicado algo y mostrar el contenido, el principal problema es que hay un arraylist para las publicaciones pero claro solo puedo añadir publicaciones en general , es decir las publicaciones no estan en la columna de ningun trabajador especifico , me gustaria que cuando yo escribiera el nombre del trabajador y despues publicar, pudiera publicar en su columna , mientras que cuando escriba en la de otro trabajador poder escribir en la suya y finalmente mostrarlas segun los nombres de los trabajadores.
Hasta ahora como ya he dicho solo he conseguido publicar en general, por asi decirlo me publico en mi propia columna pero no se como hacer lo que les he dicho.


Título: Re: Dificultades en Java
Publicado por: zepheon en 12 Abril 2011, 01:15 am
Supongo que tendrás una clase Columna y una clase Publicacion, si es así, podrías hacer que uno de los atributos del trabajador sea un objeto de la clase Columna (su columna específica) y que uno de los atributos de Publicacion sea el trabajador que la ha escrito, de esta forma la vinculas con ese trabajador en concreto. Entonces, cuando busques a un trabajador por su nombre, miras su columna y si tiene alguna publicación la muestra. La idea es jugar con los atributos para poder decir "esta publicación pertenece a tal trabajador, a tal columna, o esta columna pertenece a tal trabajador, o el trabajador tiene tales publicaciones, y así poder relacionarlos fácilmente.

Espero que te haya servido de algo aunque estemos hablando del problema a muy grandes rasgos y sin meternos en código. Si ves que no va por ahí la cosa o que habría que tener en cuenta algo sobre la implementación o algún fragmento de código para ayudarte mejor a resolver el problema, bienvenido sea  :xD

Saludos!


Título: Re: Dificultades en Java
Publicado por: Shakos en 12 Abril 2011, 17:50 pm
Haber, la cosa seria que crear un vector de publicaciones para cada trabajador y cada vez que le diera a publicar se activara un array u otro pero eso es imposible primero porque no se cuantos trabajadores se entraran desde el principio y despues que hacerlo seria una mostruosidad de codigo, bueno cuelgo lo que tengo puesto haber si ha alguien se le ocurre alguna forma.

Código
  1. Publicacion mensaje = new Publicacion();
  2.  
  3.    LinkedList columna = new LinkedList();
  4.    private int contador = 0;
  5.  
  6.  
  7.    public Persona(String nombre,String ciudad){
  8.  
  9.        this.nombre = nombre;
  10.        this.ciudad = ciudad;
  11.  
  12.    }
  13.    public Persona(){
  14.  
  15.    }
  16.    public String getNombre(){
  17.        return this.nombre;
  18.    }
  19.    public String getCiudad(){
  20.        return this.ciudad;
  21.    }
  22.  
  23.    @Override
  24.    public String toString(){
  25.  
  26.        String str = ("=============="+"\n"+this.nombre+"\n" + this.ciudad+"\n");
  27.        return str;
  28.    }
  29.  
  30.    public void Publicar(String msg){
  31.  
  32.        long fecha = ClaseAuxiliar.getFechaActual();
  33.        Publicacion nueva = new Publicacion(fecha,msg);
  34.        mensaje = nueva;
  35.        publicaciones.add(mensaje);
  36.        columna.add(publicaciones);
  37.  
  38.    }
  39.    public void Columna(){
  40.  
  41.         if(!columna.isEmpty()){
  42.  
  43.              System.out.println("      columna      ");
  44.              for(Iterator it = publicaciones.iterator(); it.hasNext();){
  45.                  Publicacion x = (Publicacion)it.next();
  46.                  System.out.println(x.toString());
  47.  
  48.              }
  49.             }
  50.              if(muros.isEmpty()){
  51.                  System.out.println("\nNo hay publicaciones recientes");
  52.              }
  53.  
  54.    }


Título: Re: Dificultades en Java
Publicado por: zepheon en 15 Abril 2011, 14:52 pm
Siento si no te respondí antes, es que he estado con exámenes y no he tenido tiempo ni para respirar xD Vi también que abriste otro post buscando alguien que te ayude sin mucha suerte, supongo que te urgirá hacer esto, así que intentaré ayudarte xD

Bueno, para empezar, yo personalmente definiría Columna como una clase a parte e implementaría una LinkedList de columnas, dentro de las que habrá o no una publicación.

Te dejo un ejemplo muy básico de como usar un HashMap aplicado a esto, que posiblemente te sirva para resolver tu problema.

Código
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.HashMap;
  5. import java.util.LinkedList;
  6.  
  7. public class HashEjemplo {
  8.  
  9. public static void main(String[] args) throws IOException {
  10.  
  11.  
  12. // Se definen dos personas de prueba
  13. Persona juanito = new Persona("Juanito", "Tokio");
  14. Persona pepito = new Persona("Pepito", "Nueva York");
  15.  
  16. // Creas el HashMap, las keys seran sus nombres y los values sus
  17. // columnas
  18. HashMap hm = new HashMap();
  19. hm.put(juanito.getNombre(), juanito.getColumnas());
  20. hm.put(pepito.getNombre(), pepito.getColumnas());
  21.  
  22. LinkedList columnas = null;
  23.  
  24. System.out.println("Nombre del trabajador: ");
  25. String name = br.readLine();
  26.  
  27. // Si el HashMap contiene un value con dicha key, lo devuelve
  28. if (hm.containsKey(name))
  29. columnas = (LinkedList) hm.get(name);
  30.  
  31. }
  32.  
  33. }
  34.  

Para implementarlo a tu aplicación, cada vez que creas un trabajador lo metes en el HashMap con su nombre como key y sus columnas como value, y luego para imprimir sus columnas recorres la LinkedList e imprimes, si es que tiene, su publicación.

Espero que te sirva, saludos!