Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Array de objetos como atributo

Estas en el tema de Array de objetos como atributo en el foro de Java en Foros del Web. Os comento tengo dos clases y una de ellas tiene como atributo un array de objetos de otra clase, el problema me lo encuentro para ...
  #1 (permalink)  
Antiguo 30/03/2013, 19:19
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Array de objetos como atributo

Os comento tengo dos clases y una de ellas tiene como atributo un array de objetos de otra clase, el problema me lo encuentro para llenar el array y hacer consultas. os dejo el codigo.

Esta es la clase campeonato la que tiene el array de cla clase Equipo
Código:
public class Campeonato {

    private String nombreCampeonato;
    private Equipo equipo[] = new Equipo[6];
    private String equipos;

    public String getNombreCampeonato() {
        return nombreCampeonato;
    }

    public Equipo[] getEquipo() {
        return equipo;
    }

    public String getEquipos() {
        return equipos;
    }

    public void setNombreCampeonato(String nombreCampeonato) {
        this.nombreCampeonato = nombreCampeonato;
    }

    public void setEquipo(Equipo[] equipo) {
        this.equipo = equipo;
    }

    public void setEquipos(String equipos) {
        this.equipos = equipos;
    }
    
}
Clase Equipo
Código:
public class Equipo{

    private String nombreEquipo;
    private byte pJugados;
    private byte pGanados;
    private byte pEmpatados;
    private byte pPerdidos;
    private byte gFavor;
    private byte gContra;
    private byte puntos;

    public Equipo() {
        this.nombreEquipo = "";
        this.pJugados = 0;
        this.pGanados = 0;
        this.pEmpatados = 0;
        this.pPerdidos = 0;
        this.gFavor = 0;
        this.gContra = 0;
        this.puntos = 0;
    }

    public String getNombreEquipo() {
        return nombreEquipo;
    }

    public byte getpJugados() {
        return pJugados;
    }

    public byte getpGanados() {
        return pGanados;
    }

    public byte getpEmpatados() {
        return pEmpatados;
    }

    public byte getpPerdidos() {
        return pPerdidos;
    }

    public byte getgFavor() {
        return gFavor;
    }

    public byte getgContra() {
        return gContra;
    }

    public byte getPuntos() {
        return puntos;
    }

    public void setNombreEquipo(String nombreEquipo) {
        this.nombreEquipo = nombreEquipo;
    }

    public void setpJugados(byte pJugados) {
        this.pJugados = pJugados;
    }

    public void setpGanados(byte pGanados) {
        this.pGanados = pGanados;
    }

    public void setpEmpatados(byte pEmpatados) {
        this.pEmpatados = pEmpatados;
    }

    public void setpPerdidos(byte pPerdidos) {
        this.pPerdidos = pPerdidos;
    }

    public void setgFavor(byte gFavor) {
        this.gFavor = gFavor;
    }

    public void setgContra(byte gContra) {
        this.gContra = gContra;
    }

    public void setPuntos(byte puntos) {
        this.puntos = puntos;
    }
}
Y la principal

Código:
public class GestionClubsConsolas {

    static int leer_opcion() {
        int opcion = -1;
        do {
            System.out.println("\nIntroduzca opcion: ");
            opcion = Leer.datoInt();
        } while (opcion < 0 || opcion > 5);

        return opcion;
    }

    static void mostrar_menu() {
        System.out.println("\nMENU PRINCIPAL");
        System.out.println("\n------------------------------------------------");
        System.out.println("\n1.--> Nuevo Campeonato.");
        System.out.println("\n2.--> Actualizar Campeonato.");
        System.out.println("\n3.--> Consultar Campeonato.");
        System.out.println("\n\n0.--> Salir.");
        System.out.println("\n------------------------------------------------");
    }

    static void tratar_opcion(int op, Campeonato campeonato) {

        switch (op) {

            case 0:
                //Salir();
                break;
            case 1:
                nuevoCampeonato(campeonato);
                break;
            case 2:
                //ActualizarCampeonato();
                break;
            case 3:
                //ConsultarCampeonato();
                break;
        }
    }

    public static void main(String args[]) {

        int opcion = -1;
        Campeonato campeonato = new Campeonato();

        do {
            mostrar_menu();
            opcion = leer_opcion();
            tratar_opcion(opcion, campeonato);
        } while (opcion != 0);

        System.out.println("\n\nFIN DEL PROGRAMA.\n\n");
    }

    static void nuevoCampeonato(Campeonato campeonato) {
        String nombre;
        System.out.println("Dele un nombre al campeonato");
        nombre = Leer.dato();
        campeonato.setNombreCampeonato(nombre);
        System.out.println("El nombre del campeonato será: " + campeonato.getNombreCampeonato());

        introducirEquipos(campeonato);
    }

    static void introducirEquipos(Campeonato campeonato) {
        int i;
        String nombre;

        for (i = 0; i < campeonato.getEquipo().length; i++) {
            System.out.println("Introduzca el nombre del equipo " + (i+1) + ".");
            nombre = Leer.dato();
        }
    }
}
En las letras negritas tengo el problema no se como llenar el array con el nombre de los equipos.
  #2 (permalink)  
Antiguo 30/03/2013, 19:22
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Array de objetos como atributo

Os agradecería que me ayudaseis ya que no encuentro como hacerlo, a lo mejor es de conceptos, pero no encuentro algo que me explique en concreto esto.
  #3 (permalink)  
Antiguo 31/03/2013, 02:17
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Array de objetos como atributo

...pues haber analicemos un poco...

Código JAVA:
Ver original
  1. static void introducirEquipos(Campeonato campeonato) {
  2.         int i;
  3.         String nombre;
  4.  
  5.         for (i = 0; i < campeonato.getEquipo().length; i++) {
  6.             System.out.println("Introduzca el nombre del equipo " + (i+1) + ".");
  7.             nombre = Leer.dato();
  8.         }
  9.     }

Donde tenes definido el objeto Leer? y el método dato() ?

...para ingresar los nombres de los equipos debes usar la clase Scanner y el método nextLine(), y almacenar cada nombre en un array, pero no se si eso lo tienes dentro del objeto Leer...que no lo veo por ninguna parte

...si quito el "nombre=Leer.dato()"... debería quedar así...previamente debes importar la clase Scanner (import java.util.Scanner)...luego creas una instancia de Scanner (entradaNombre), defines un array de tipo String (nombre) cuyo tamaño es campeonato.getEquipo().length, luego dentro del loop almacenas cada nombre en nombre[i]

Código JAVA:
Ver original
  1. static void introducirEquipos(Campeonato campeonato) {
  2.         Scanner entradaNombre = new Scanner(System.in);
  3.         String[] nombre = new String[campeonato.getEquipo().length];
  4.  
  5.         for (int i = 0; i < campeonato.getEquipo().length; i++) {
  6.             System.out.println("Introduzca el nombre del equipo " + (i+1) + ".");
  7.             nombre[i] = entradaNombre.nextLine();
  8.         }
  9.     }


...no se como funciona todo lo demás, he visto uno que otro error conceptual.. deberías revisar...
  #4 (permalink)  
Antiguo 31/03/2013, 05:39
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Array de objetos como atributo

perdon por no poner la clase Leer, ya que lo unico que hace es leer por teclado, la adjunto.

Código:
public class Leer {

    public static String dato() {
        String sdato = "";
        try {
            // Definir un flujo de caracteres de entrada: flujoE
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader flujoE = new BufferedReader(isr);
            // Leer. La entrada finaliza al pulsar la tecla Entrar
            sdato = flujoE.readLine();
        } catch (IOException e) {
            System.err.println("Error: " + e.getMessage());
        }
        return sdato; // devolver el dato tecleado
    }

    public static short datoShort() {
        try {
            return Short.parseShort(dato());
        } catch (NumberFormatException e) {
            return Short.MIN_VALUE; // valor más pequeño
        }
    }

    public static int datoInt() {
        try {
            return Integer.parseInt(dato());
        } catch (NumberFormatException e) {
            return Integer.MIN_VALUE; // valor más pequeño
        }
    }

    public static long datoLong() {
        try {
            return Long.parseLong(dato());
        } catch (NumberFormatException e) {
            return Long.MIN_VALUE; // valor más pequeño
        }
    }

    public static float datoFloat() {
        try {
            return Float.parseFloat(dato());
        } catch (NumberFormatException e) {
            return Float.NaN; // No es un número (valor float)
        }
    }

    public static double datoDouble() {
        try {
            return Double.parseDouble(dato());
        } catch (NumberFormatException e) {
            return Double.NaN; // No es un número (valor double)
        }
    }
}
Código:
static void introducirEquipos(Campeonato campeonato) {
        int i;
        String nombre;
 
        for (i = 0; i < campeonato.getEquipo().length; i++) {
            System.out.println("Introduzca el nombre del equipo " + (i+1) + ".");
            nombre = Leer.dato();
           campeonato.getEquipo()[i].setNombreEquipo(nombre);

        }
    }
aqui nombre lo tengo como variable tempora para guardar el nombre que introduzca por teclado. y ahi es donde me encuentro el problema. ya que en teoria lo que quiero hacer es algo asi (La parte que esta en negrita).
ya que lo que quiero hacer es ir añadiendo el nombre del equipo(atributo de la clase Equipo) y que se añada en el array de la clase Campeonato.

Aqui es donde esta el trozo de codigo donde declaro el atributo que es un array de objetos Equipo
Código:
public class Campeonato {

    private String nombreCampeonato;
    private Equipo equipo[] = new Equipo[6]; // atributo de la clase campeonato
    private String equipos;
En la clase atributo tiene una serie de atributos son privados(Pero tienen sus getter and setter).

Yo lo que quiero es podeer ir asignando en el array de objetos equipo su atributo nombrede equipo.
  #5 (permalink)  
Antiguo 31/03/2013, 17:36
Avatar de osaka80  
Fecha de Ingreso: mayo-2012
Mensajes: 65
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Array de objetos como atributo

Hola muy buenas, he tomado la función Actualizar para mostrar si los datos se guardaban correctamente, ya si eso tu luego lo quitas

Código Java:
Ver original
  1. public class GestionClubsConsolas {
  2.     static int leer_opcion() {
  3.         int opcion = -1;
  4.         do {
  5.             System.out.print("\nIntroduzca opcion: ");
  6.             opcion = Leer.datoInt();
  7.         } while (opcion < 0 || opcion > 5);
  8.  
  9.         return opcion;
  10.     }
  11.  
  12.     static void mostrar_menu() {
  13.         System.out.println("\n MENU PRINCIPAL");
  14.         System.out.println("================");
  15.         System.out.println(" 1.--> Nuevo Campeonato.");
  16.         System.out.println(" 2.--> Actualizar Campeonato.");
  17.         System.out.println(" 3.--> Consultar Campeonato.");
  18.         System.out.println(" 0.--> Salir.");
  19.         System.out.println("----------------------------------------");
  20.     }
  21.  
  22.     static void tratar_opcion(int op, Campeonato campeonato) {
  23.  
  24.         switch (op) {
  25.  
  26.             case 0:
  27.                 //Salir();
  28.                 break;
  29.             case 1:
  30.                 nuevoCampeonato(campeonato);
  31.                 break;
  32.             case 2:
  33.                 ActualizarCampeonato(campeonato);
  34.                 break;
  35.             case 3:
  36.                 //ConsultarCampeonato();
  37.                 break;
  38.         }
  39.     }
  40.  
  41.     public static void main(String args[]) {
  42.  
  43.         int opcion = -1;
  44.         Campeonato campeonato = new Campeonato();
  45.  
  46.         do {
  47.             mostrar_menu();
  48.             opcion = leer_opcion();
  49.             tratar_opcion(opcion, campeonato);
  50.         } while (opcion != 0);
  51.  
  52.         System.out.println("\n\nFIN DEL PROGRAMA.\n\n");
  53.     }
  54.  
  55.     static void nuevoCampeonato(Campeonato campeonato) {
  56.         String nombre;
  57.         System.out.println("Dele un nombre al campeonato");
  58.         nombre = Leer.dato();
  59.         campeonato.setNombreCampeonato(nombre);
  60.         System.out.println("El nombre del campeonato será: " + campeonato.getNombreCampeonato());
  61.  
  62.         introducirEquipos(campeonato);
  63.     }
  64.  
  65.     static void introducirEquipos(Campeonato campeonato) {
  66.         int i;
  67.         String nombre;
  68.        Equipo equipo;
  69.         for (i = 0; i < campeonato.getEquipo().length; i++) {
  70.             System.out.println("Introduzca el nombre del equipo " + (i+1) + ".");
  71.             nombre = Leer.dato();
  72.           equipo=new Equipo();
  73.             campeonato.getEquipo()[i]=equipo;
  74.             equipo.setNombreEquipo(nombre);
  75.            }
  76.     }
  77.    
  78.   public static void ActualizarCampeonato(Campeonato campeonato){
  79.         System.out.println("Nombre de campeonato: "+campeonato.getNombreCampeonato());
  80.         for (int i = 0; i < campeonato.getEquipo().length; i++) {
  81.             System.out.println("Equipo " + (i+1) + ": "+campeonato.getEquipo()[i].getNombreEquipo());
  82.            
  83.         }
  84.     }
  85.  
  86. }
  #6 (permalink)  
Antiguo 03/04/2013, 19:17
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Array de objetos como atributo

Gracias por la respuesta compi, al final me ha salido correctamente, gracias porla orientacion, no me habia dado cuenta. la primera solucion como me hacia falta para la aplicacion final, he utilizado ficheros y todo ok.

Etiquetas: clase, objetos, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:53.