Java - Ayuda con error, al usar arraylist

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Andres (5 intervenciones) el 19/11/2018 02:32:40
Tengo problemas al usar la opción 2 del switch, ya que no se muestran los 2 equipos, solo se muestra el segundo. Tengo entendido que es porque el arraylist guarda el ultimo valor, pero no entiendo porque, seria de gran ayuda si alguien me podría indicar que linea cambiar o mejorar.

Me manda el siguiente error en consola:
1
2
3
4
Exception in thread "main" java.lang.NullPointerException
	at AppPartidoBaby.main(AppPartidoBaby.java:135)
C:\Users\andres\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 27 seconds)

La linea 135 es:
1
nomj=objPartido.getListaTeam().get(i).getArrPlayer()[j].getNombre();

Dejo todo el código esperando respuestas, gracias de antemano.

AppPartidoBaby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import java.util.Scanner;
import Entidad.*;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class AppPartidoBaby {
 
    public static void main(String[] args) throws IOException {
 
        Scanner sc=new Scanner(System.in);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        PartidoBaby objPartido=new PartidoBaby();
        Player [] jug=new Player [6];
        int opc,s,e,p,t;
        String nomj="";
        String apej="";
        String nomt="";
        float tamj=0;
         do {
            do {
                menu();
                opc=sc.nextInt();
            } while (!(opc>0 && opc<6));
 
            switch(opc)
            {
              case 1:
 
              System.out.println("\n");
              System.out.println("Ingrese Datos Del Partido: ");
              System.out.println("----------------------------");
              sc.nextLine();
              System.out.println("Ingrese la fecha: ");
              System.out.print("Dia del partido: ");
              byte d=sc.nextByte();
              System.out.print("Mes del partido(Ingrese el numero del mes): ");
              byte m=sc.nextByte();
              System.out.print("Año del partido(Agregar los dos ultimos digitos de 2000, por ejemplo: ingresa 10 se guarda 2010): ");
              byte a=sc.nextByte();
              objPartido.setFecha(d,m,a);
              objPartido.getFecha();
              sc.nextLine();
              System.out.println("Ingrese los datos del Partido");
              System.out.print("Ingrese nombre del partido: ");
              objPartido.setNombre(sc.nextLine());
              System.out.println("Ingrese los equipos que participaran en el partido: ");
              //Primer equipo
              System.out.println("Datos del primer equipo");
              System.out.print("Ingrese el nombre del equipo: ");
              objPartido.getObjTeam().setNombre(sc.nextLine());
              System.out.print("Ingrese la ciudad del equipo: ");
              objPartido.getObjTeam().setCiudad(sc.nextLine());
              System.out.println("*****************************");
              //Jugadores del  primer equipo
              for(int i=0;i<2;i++){
              System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
              System.out.println("------------------------------------");
              System.out.print("Ingrese el nombre del jugador: ");
              nomj=br.readLine();
              objPartido.getObjTeam().getObjPlayer().setNombre(nomj);
              System.out.print("Ingrese el apellido del jugador: ");
              apej=br.readLine();
              objPartido.getObjTeam().getObjPlayer().setApellido(apej);
              System.out.print("Ingrese el tamaño del jugador: ");
              tamj=sc.nextByte();
              objPartido.getObjTeam().getObjPlayer().setTamanio(tamj);
              System.out.println("------------------------------------");
              jug[i]=new Player(nomj,apej,tamj);
              objPartido.getObjTeam().setArrPlayer(jug);
              objPartido.getListaTeam().add(objPartido.getObjTeam());
              }
 
              sc.nextLine();
 
              //Segundo equipo
              System.out.println("Datos del segundo equipo");
              System.out.print("Ingrese el nombre del equipo: ");
              objPartido.getObjTeam().setNombre(sc.nextLine());
              System.out.print("Ingrese la ciudad del equipo: ");
              objPartido.getObjTeam().setCiudad(sc.nextLine());
              System.out.println("*****************************");
              //Jugadores del  Segundo equipo
               for(int i=0;i<2;i++){
              System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
              System.out.println("------------------------------------");
              System.out.print("Ingrese el nombre del jugador: ");
              nomj=br.readLine();
              objPartido.getObjTeam().getObjPlayer().setNombre(nomj);
              System.out.print("Ingrese el apellido del jugador: ");
              apej=br.readLine();
              objPartido.getObjTeam().getObjPlayer().setApellido(apej);
              System.out.print("Ingrese el tamaño del jugador: ");
              tamj=sc.nextByte();
              objPartido.getObjTeam().getObjPlayer().setTamanio(tamj);
              System.out.println("------------------------------------");
              jug[i]=new Player(nomj,apej,tamj);
              objPartido.getObjTeam().setArrPlayer(jug);
              objPartido.getListaTeam().add(objPartido.getObjTeam());
              }
 
              sc.nextLine();
 
                    break;
                case 2:
                System.out.println("Mostramos informacion:");
                for (int i=0;i<3;i++){
                   nomt=objPartido.getListaTeam().get(i).getNombre();
                   System.out.println("Nombre equipo: "+nomt);
 
                for(int j=0;j<objPartido.getListaTeam().size();j++){
 
            nomj=objPartido.getListaTeam().get(i).getArrPlayer()[j].getNombre();
            apej=objPartido.getListaTeam().get(i).getArrPlayer()[j].getApellido();
            tamj=objPartido.getListaTeam().get(i).getArrPlayer()[j].getTamanio();
            System.out.println("Jugador "+(j+1)+": "+nomj+" "+apej);
                   }
                  }
                break;
                case 3:
                break;
                case 4:
                break;
                case 5:
                System.out.println("¿Seguro que quiere salir del programa?(1 para salir, 2 para seguir)");
                System.out.print("Ingrese opcion: ");
                s=sc.nextInt();
                if(s==1){
                opc=5;
                }else{
                opc=6;
                }
          }
        } while (opc !=5);
    }
}

Entidad.PartidoBaby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package Entidad;
import java.util.ArrayList;
 
public class PartidoBaby {
    private String _nombre;
    private byte _dia;
    private byte _mes;
    private byte _anio;
    private String mes;
    private ArrayList<Team> _listaTeam;
    private Team objTeam;
 
    public PartidoBaby() {
        _listaTeam=new ArrayList<>();
        objTeam=new Team();
 
    }
    public String getNombre() {
        return _nombre;
    }
    public void setNombre(String _nombre) {
        this._nombre = _nombre;
    }
    public byte getDia() {
        return _dia;
    }
    public void setDia(byte _dia) {
        this._dia = _dia;
    }
    public byte getMes() {
        return _mes;
    }
    public void setMes(byte _mes) {
        this._mes = _mes;
    }
    public byte getAnio() {
        return _anio;
    }
    public void setAnio(byte _anio) {
        this._anio = _anio;
    }
    public void getFecha() {
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        System.out.println("El partido queda fijado para el dia "+_dia+" de "+mes+" del 20"+_anio);
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    }
    public String setFecha(byte d,byte m,byte a) {
 
        this._dia = d;
        this._mes = m;
        this._anio = a;
        String fecha = _dia+" "+_mes+" "+_anio;
        return fecha;
    }
    public ArrayList<Team> getListaTeam() {
        return _listaTeam;
    }
    public void setListaTeam(ArrayList<Team> _listaTeam) {
        this._listaTeam = _listaTeam;
    }
    public Team getObjTeam() {
        return objTeam;
    }
    public void setObjTeam(Team objTeam) {
        this.objTeam = objTeam;
    }

Entidad.Team
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package t;
 
public class Team {
private String _nombre;
private String _ciudad;
private Player[] arrPlayer;
private Player objPlayer;
 
    public Team() {
        arrPlayer = new Player[6];
        objPlayer= new Player();
    }
    public Team(String _nombre, String _ciudad) {
        this._nombre = _nombre;
        this._ciudad = _ciudad;
        this.arrPlayer = arrPlayer;
        arrPlayer = new Player[6];
        objPlayer= new Player();
    }
 public String getCiudad() {
        return _ciudad;
    }
    public void setCiudad(String _ciudad) {
        this._ciudad = _ciudad;
    }
    public String getNombre() {
        return _nombre;
    }
    public void setNombre(String _nombre) {
        this._nombre = _nombre;
    }
    public Player[] getArrPlayer() {
        return arrPlayer;
    }
    public void setArrPlayer(Player[] v) {
        this.arrPlayer = v;
    }
    public Player getObjPlayer() {
        return objPlayer;
    }
    public void setObjPlayer(Player objPlayer) {
        this.objPlayer = objPlayer;
    }
}

Entidad.Player

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Player {
private String _nombre;
private String _apellido;
private float  _tamanio;
 
    public Player() {
    }
    public Player(String _nombre, String _apellido, float _tamanio) {
        this._nombre = _nombre;
        this._apellido = _apellido;
        this._tamanio = _tamanio;
    }
    public float getTamanio() {
        return _tamanio;
    }
    public void setTamanio(float _tamanio) {
        this._tamanio = _tamanio;
    }
    public String getNombre() {
        return _nombre;
    }
    public void setNombre(String _nombre) {
        this._nombre = _nombre;
    }
    public String getApellido() {
        return _apellido;
    }
    public void setApellido(String _apellido) {
        this._apellido = _apellido;
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Kabuto (1381 intervenciones) el 19/11/2018 14:04:12
Hola.
EL problema es que en realidad no estás guardando en los array/ArrayList
En tus clases, no se por qué, usas como atributo un objeto separado de la clase que quieres guardar.
Por ejemnplo:
1
2
private Player[] arrPlayer;
private Player objPlayer;

O tambien:
1
2
private ArrayList<Team> _listaTeam;
private Team objTeam;

Puesto que introduces datos en ese objeto, no en las colecciones de objetos, no solo no se está guardando toda la informacion, si no que cuando quieres acceder al ArrayList para mostrar información, te lo encuentras vacío (por eso el error NullPointerException)

No necesitas esos objetos para nada, tan solo las colecciones de datos.
He hecho alguno pequeños cambios en las clases, procurando no variar apenas tu diseño inicial, para que funcione.

Vamos a verlas una a una.

Clase Player
Esta apenas la he cambiado, tan solo le he añadido el método toString(), algo que también he hecho al resto de clases y te explico por qué.
En el menu principal, queremos mostrar toda la informacion del partido, con sus equipos y jugadores.
Podemos recuperar todos esos datos, formatearlos en el main y mostrarlos.

O , mejor aún, podemos "enseñarle" a cada clase como debe mostrarse por pantalla cuando se lo pidamos.
Para ello podemos usar un método propio nuestro, o aprovechar el metodo toString() que TODAS las clases heredan SIEMPRE de la superclase Object.
Para usarla, tan solo tenemos que "sobreescribirla" (Override) con un código a nuestro gusto, pero siempre ha de devolver un String.
Este String puedes crearlo como quieras, yo para esta clase me he valido del método String.format().
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Player {
	private String _nombre;
	private String _apellido;
	private float  _tamanio;
 
	public Player() {
	}
	public Player(String _nombre, String _apellido, float _tamanio) {
		this._nombre = _nombre;
		this._apellido = _apellido;
		this._tamanio = _tamanio;
	}
	public float getTamanio() {
		return _tamanio;
	}
	public void setTamanio(float _tamanio) {
		this._tamanio = _tamanio;
	}
	public String getNombre() {
		return _nombre;
	}
	public void setNombre(String _nombre) {
		this._nombre = _nombre;
	}
	public String getApellido() {
		return _apellido;
	}
	public void setApellido(String _apellido) {
		this._apellido = _apellido;
	}
 
	@Override
	public String toString() {
		return String.format("\tNombre: %s %s, Tamaño: %.2f", _nombre, _apellido, _tamanio);
	}
}


Clase Team
Aquí si he hecho más cambios.
Elimino el objeto Player ese suelto, que ya hemos dicho que no lo necesitamos, asi como su correspondiente get y set.

Para almacenar los Player que componen el equipo, me parece más cómodo usar un ArrayList y no un array primitivo.
Si usamos un array primitivo, tendríamos que gestionar además un indice para decirle al array en que posicion debe colocar cada Player que recibe.
En cambio, con ArrayList, no hace falta. Basta con añadir Players sin preocuparnos de indices.
Asi que cambio el array primitivo (tú luego, hazlo como mejor te parezca) por un ArrayList y adapto sus correspondientes get y set.

Agrego un nuevo método que recibirá un Player por argumentos y lo añadirá al ArrayList. Ahora si quedarán guardados todos los jugadores que registremos en el menu principal.

Añado también el método toString().
Esta vez compongo el String que debe retorna de forma distinta. Me valgo de la clase StringBuilder para concatenar varias cadenas con un formato a mi gusto para luego mostrar en pantalla la informacion de este equipo(Team).
Podría haber hecho las concatenaciones directamente con la clase String habitual, pero StringBuilder consume menos recursos y es más apropiada para estas movidas.
Esto no es muy importante saberlo, pero no está de más y te lo comento por si quieres investigar por tu cuenta algo más sobre la clase StringBuilder.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.ArrayList;
 
public class Team {
	private String _nombre;
	private String _ciudad;
	private ArrayList<Player> arrPlayer;
	//private Player objPlayer;
 
	public Team() {
		arrPlayer = new ArrayList<Player>();
		//objPlayer= new Player();
	}
	public Team(String _nombre, String _ciudad) {
		this._nombre = _nombre;
		this._ciudad = _ciudad;
		//this.arrPlayer = arrPlayer;
		arrPlayer =new ArrayList<Player>();
		//objPlayer= new Player();
	}
	public String getCiudad() {
		return _ciudad;
	}
	public void setCiudad(String _ciudad) {
		this._ciudad = _ciudad;
	}
	public String getNombre() {
		return _nombre;
	}
	public void setNombre(String _nombre) {
		this._nombre = _nombre;
	}
	public ArrayList<Player> getArrPlayer() {
		return arrPlayer;
	}
	public void setArrPlayer(ArrayList<Player> v) {
		this.arrPlayer = v;
	}
 
	public void agregarJugador(Player jugador) {
		arrPlayer.add(jugador);
	}
 
	@Override
	public String toString() {
		StringBuilder texto = new StringBuilder();
		texto.append("\nEQUIPO:");
		texto.append("\n\tNombre: " + _nombre);
		texto.append("\tCiudad: " + _ciudad);
		texto.append("\nJUGADORES:\n");
		for (Player jugador: arrPlayer)
			texto.append(jugador.toString() + "\n");
 
		return texto.toString();
	}
	/*
	public Player getObjPlayer() {
		return objPlayer;
	}
	public void setObjPlayer(Player objPlayer) {
		this.objPlayer = objPlayer;
	}*/
}

Clase PartidoBaby
Aquí los cambios son similares a los de antes.

Elimino el objeto suelto ese que no necesitamos.

He dejado el ArrayList que pusiste. Pienso que para esta clase no es necesario. Puesto que en un partido solo pueden haber dos equipos, ni más ni menos... quizás habría sido más correcto usar dos atributos tipo:
1
2
Team equipo1;
Team equipo2;
Pero bueno, con el ArrayList también podemos funcionar, no pasa nada.

Como antes, añado un método que se encargará de añadir Teams al ArrayList donde quedarán guardados.
Y como no, añado también el método toString() para enseñarle como debe ser el String que representa toda la informacion del partido en pantalla.
Fíjate que para mostrar la informacion del partido, llamamos al método toString de la clase Team, que a su vez llamará al método toString de la clase Player.
Puesto que le hemos enseñado a cada clase como debe mostrarse en pantalla, luego en el main nos va a bastar con UNA sola instrucción para mostrar TODA la informacion de las distintas clases.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import java.util.ArrayList;
 
public class PartidoBaby {
	private String _nombre;
	private byte _dia;
	private byte _mes;
	private byte _anio;
	private String mes;
	private ArrayList<Team> _listaTeam;
	//private Team objTeam;
 
	public PartidoBaby() {
		_listaTeam=new ArrayList<>();
		//objTeam=new Team();
 
	}
	public String getNombre() {
		return _nombre;
	}
	public void setNombre(String _nombre) {
		this._nombre = _nombre;
	}
	public byte getDia() {
		return _dia;
	}
	public void setDia(byte _dia) {
		this._dia = _dia;
	}
	public byte getMes() {
		return _mes;
	}
	public void setMes(byte _mes) {
		this._mes = _mes;
	}
	public byte getAnio() {
		return _anio;
	}
	public void setAnio(byte _anio) {
		this._anio = _anio;
	}
	public void getFecha() {
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		System.out.println("El partido queda fijado para el dia "+_dia+" de "+mes+" del 20"+_anio);
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
	}
	public String setFecha(byte d,byte m,byte a) {
 
		this._dia = d;
		this._mes = m;
		this._anio = a;
		String fecha = _dia+" "+_mes+" "+_anio;
		return fecha;
	}
	public ArrayList<Team> getListaTeam() {
		return _listaTeam;
	}
	public void setListaTeam(ArrayList<Team> _listaTeam) {
		this._listaTeam = _listaTeam;
	}
 
	public void agregarEquipo(Team equipo) {
		_listaTeam.add(equipo);
	}
 
	@Override
	public String toString() {
		StringBuilder texto = new StringBuilder();
		texto.append("\nPartido: " + _nombre);
		texto.append("\tFecha: " + _dia + "/" + _mes + "/20" + _anio);
		for (Team equipo: _listaTeam)
			texto.append(equipo.toString());
 
		return texto.toString();
	}
	/*
	public Team getObjTeam() {
		return objTeam;
	}
	public void setObjTeam(Team objTeam) {
		this.objTeam = objTeam;
	}*/
}

Clase AppPartidoBaby

Y llegamos a la aplicacion main()
Bien, cambios que hecho:

- No pusiste cómo es tu metodo menu(), así que he hecho yo uno suponiendo más o menos como puede ser por las opciones del switch()

- Por algún motivo, usas un Scanner y también un BufferedReader para pedir datos por teclado. No lo veo necesario, así que he dejado solo el Scanner, que me parece más apropiado para el teclado. Aunque se puede usar uno u otro.

- Como en todo programa en el que tenemos que leer datos String y datos numéricos, nos encontramos con el problema habitual de que tras leer un dato numérico luego falla al querer leer un String y para evitarlo tenemos que ir poniendo sc.nextLine() sueltos repartidos por el código.
Yo prefiero evitar este problema de otro modo. Lo que hago es leer por teclado SIEMPRE usando sc.nextLine(). Y si el dato que quiero es un entero, un float, un byte.... pues uso el método apropiado para parsearlo a lo que necesite. Por ejemplo:
1
2
System.out.print("Dia del partido: ");
byte d=Byte.valueOf(sc.nextLine());
O tambien:
1
2
System.out.print("Ingrese el tamaño del jugador: ");
tamj=Float.parseFloat(sc.nextLine());
Esto tiene dos ventajas:
- Una, evitar el dichoso problema que hemos comentado antes.
- Dos, es bueno acostumbrarse a leer así los datos ya que cuando avances más en programación, dejes de pedir datos por consola y empieces a leer datos con interfaces de ventanas, botones, formularios etc.... estos campos de texto siempre devuelven los datos en formato String.
Así que siempre vamos a tener que parsearlos al tipo de dato que necesitemos. Por lo que no está de más ir cogiendo ya costumbre de tener que hacerlo así.

He quitado también un array de 6 Player que no se muy bien que uso tenía pensado darle. Puede que con los cambios que hemos hecho ya no lo necesites.

Algo que también ha cambiado es como procesamos los datos que pedimos por teclado.
Presta mucha atención a cómo lo he hecho. Básicamente he seguido estos pasos:
- Instanciamos un nuevo PartidoBaby, esto es muy importante para asegurarnos de que eliminamos cualquier dato perteneciente un partido creado anteriormente.
1
objPartido = new PartidoBaby();
- Pido datos del partido.
- Seteo dichos datos.

-Pido datos del primer equipo, estos datos los guardo en varaibles String
1
2
String nomEquipo = sc.nextLine();
String ciudadEquipo = sc.nextLine();
- Cuando ya tengo todos los datos, creo un nuevo Team
1
Team primerEquipo = new Team(nomEquipo, ciudadEquipo);

-Este Team habría que añadirlo al ArrayList que contiene nuestro objeto PartidoBaby, pero no lo hacemos todavía.
- Primero pediremos datos para crear los Player, que habrá que añadir a este Team.

-Pedimos datos de Players en un bucle for. Al igual que antes, los voy guardando en unos String
1
2
3
nomj=sc.nextLine();
apej=sc.nextLine();
tamj=Float.parseFloat(sc.nextLine());

Y cuando los tengo todos, instancio un nuevo Player y directamente se lo agrego a este Team invocando el nuevo método que le añadí
1
primerEquipo.agregarJugador(new Player(nomj,apej,tamj));

- Esto se repite hasta que acabe el for. lo cual significa que el Team ya tiene todos los Player que necesita.
Así que este primer Team, ya lo puedo añadir al PartidoBaby:
1
objPartido.agregarEquipo(primerEquipo);

- Y ahora se repite el mismo proceso, pero para crear un segundo Team.



Lo que también ha quedado mucho más simplificado, es la opción de mostrar la informacion del partido en pantalla.
Gracias a que a cada clase le hemos configurado un metodo toString(), para mostrar toda la información nos basta con apenas un par de lineas:
1
2
3
case 2:
	System.out.println("Mostramos informacion:");
	System.out.println(objPartido.toString()); //Esto muestra info formateada del partido, de los equipos y de los jugadores

Bueno, aqui te pongo el código de esta clase.
Todo lo que ya no se usa lo he dejado como comentario. Se puede eliminar cuando ya no le veas ninguna utilidad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import java.util.Scanner;
import java.io.IOException;
 
public class AppPartidoBaby {
 
	public static void main(String[] args) throws IOException {
 
		Scanner sc=new Scanner(System.in);
		//BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		PartidoBaby objPartido=new PartidoBaby();
		//Player [] jug=new Player [6];
		int opc,s,e,p,t;
		String nomj="";
		String apej="";
		//String nomt="";
		float tamj=0;
		do {
			do {
				menu();
				opc=Integer.parseInt(sc.nextLine());
			} while (!(opc>0 && opc<6));
 
			switch(opc)
			{
			case 1:
 
				objPartido = new PartidoBaby();//Hay que reinstanciar este objeto para eliminar cualquier posible referencia anterior
				System.out.println("\nIngrese Datos Del Partido: ");
				System.out.println("----------------------------");
				//sc.nextLine();
				System.out.println("Ingrese la fecha: ");
				System.out.print("Dia del partido: ");
				byte d=Byte.valueOf(sc.nextLine());
				System.out.print("Mes del partido(Ingrese el numero del mes): ");
				byte m=Byte.valueOf(sc.nextLine());
				System.out.print("Año del partido(Agregar los dos ultimos digitos de 2000, por ejemplo: ingresa 10 se guarda 2010): ");
				byte a=Byte.valueOf(sc.nextLine());
				objPartido.setFecha(d,m,a);
				objPartido.getFecha();
				//sc.nextLine();
				System.out.println("Ingrese los datos del Partido");
				System.out.print("Ingrese nombre del partido: ");
				objPartido.setNombre(sc.nextLine());
				System.out.println("Ingrese los equipos que participaran en el partido: ");
				//Primer equipo
				System.out.println("Datos del primer equipo");
				System.out.print("Ingrese el nombre del equipo: ");
				//objPartido.getObjTeam().setNombre(sc.nextLine());
				String nomEquipo = sc.nextLine();
				System.out.print("Ingrese la ciudad del equipo: ");
				//objPartido.getObjTeam().setCiudad(sc.nextLine());
				String ciudadEquipo = sc.nextLine();
				//Creamos primer equipo
				Team primerEquipo = new Team(nomEquipo, ciudadEquipo);
				System.out.println("*****************************");
				//Jugadores del  primer equipo
				for(int i=0;i<2;i++){
					System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
					System.out.println("------------------------------------");
					System.out.print("Ingrese el nombre del jugador: ");
					nomj=sc.nextLine();
					//objPartido.getObjTeam().getObjPlayer().setNombre(nomj);
					System.out.print("Ingrese el apellido del jugador: ");
					apej=sc.nextLine();
					//objPartido.getObjTeam().getObjPlayer().setApellido(apej);
					System.out.print("Ingrese el tamaño del jugador: ");
					tamj=Float.parseFloat(sc.nextLine());
					//objPartido.getObjTeam().getObjPlayer().setTamanio(tamj);
					System.out.println("------------------------------------");
					//Añadimos jugador al equipo
					primerEquipo.agregarJugador(new Player(nomj,apej,tamj));
					//jug[i]=new Player(nomj,apej,tamj);
					//objPartido.getObjTeam().setArrPlayer(jug);
					//objPartido.getListaTeam().add(objPartido.getObjTeam());
				}
				//El equipo ya tiene jugadores, añadimos equipo al partido
				objPartido.agregarEquipo(primerEquipo);
				//sc.nextLine();
 
				//Segundo equipo
				System.out.println("Datos del segundo equipo");
				System.out.print("Ingrese el nombre del equipo: ");
				nomEquipo = sc.nextLine();
				System.out.print("Ingrese la ciudad del equipo: ");
				ciudadEquipo = sc.nextLine();
				//Creamos segundo equipo
				Team segundoEquipo = new Team(nomEquipo, ciudadEquipo);
				System.out.println("*****************************");
				//Jugadores del  Segundo equipo
				for(int i=0;i<2;i++){
					System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
					System.out.println("------------------------------------");
					System.out.print("Ingrese el nombre del jugador: ");
					nomj=sc.nextLine();
					//objPartido.getObjTeam().getObjPlayer().setNombre(nomj);
					System.out.print("Ingrese el apellido del jugador: ");
					apej=sc.nextLine();
					//objPartido.getObjTeam().getObjPlayer().setApellido(apej);
					System.out.print("Ingrese el tamaño del jugador: ");
					tamj=Float.parseFloat(sc.nextLine());
					//objPartido.getObjTeam().getObjPlayer().setTamanio(tamj);
					System.out.println("------------------------------------");
					segundoEquipo.agregarJugador(new Player(nomj, apej, tamj));
					/*
					jug[i]=new Player(nomj,apej,tamj);
					objPartido.getObjTeam().setArrPlayer(jug);
					objPartido.getListaTeam().add(objPartido.getObjTeam());*/
				}
				objPartido.agregarEquipo(segundoEquipo);
				//sc.nextLine();
 
				break;
			case 2:
				System.out.println("Mostramos informacion:");
				System.out.println(objPartido.toString()); //Esto muestra info formateada del partido, de los equipos y de los jugadores
				/*for (int i=0;i<3;i++){
					nomt=objPartido.getListaTeam().get(i).getNombre();
					System.out.println("Nombre equipo: "+nomt);

					for(int j=0;j<objPartido.getListaTeam().size();j++){

						nomj=objPartido.getListaTeam().get(i).getArrPlayer()[j].getNombre();
						apej=objPartido.getListaTeam().get(i).getArrPlayer()[j].getApellido();
						tamj=objPartido.getListaTeam().get(i).getArrPlayer()[j].getTamanio();
						System.out.println("Jugador "+(j+1)+": "+nomj+" "+apej);
					}
				}*/
				break;
			case 3:
				break;
			case 4:
				break;
			case 5:
				System.out.println("¿Seguro que quiere salir del programa?(1 para salir, 2 para seguir)");
				System.out.print("Ingrese opcion: ");
				s=sc.nextInt();
				if(s==1){
					opc=5;
				}else{
					opc=6;
				}
			}
		} while (opc !=5);
		sc.close();
	}
 
	static void menu() {
		System.out.println("\n\n\t\t\tMENU");
		System.out.println("\t\t\t----\n");
		System.out.println("\t1- Ingresar datos del Partido");
		System.out.println("\t2- Mostrar informacion del Partido");
		System.out.println("\t3- En Construccion");
		System.out.println("\t4- En Construccion");
		System.out.println("\t5- Finalizar programa");
		System.out.print("\nElija opcion: ");
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Xavi
Val: 491
Bronce
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Xavi (25 intervenciones) el 19/11/2018 17:26:20
Excelente!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Andres (5 intervenciones) el 19/11/2018 18:19:56
Muchísimas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Andres (5 intervenciones) el 19/11/2018 20:50:28
Disculpa pero, como podría hacer que mostrara todos los partidos guardados. Ya que solo muestra el partido ingresado recientemente, te pregunto porque no entiendo muy bien como funciona el método:
1
2
3
4
5
6
7
8
9
10
@Override
	public String toString() {
		StringBuilder texto = new StringBuilder();
		texto.append("\nPartido: " + _nombre);
		texto.append("\tFecha: " + _dia +" de "+ mes +" del 20"+ _anio);
		for (Team equipo: _listaTeam)
			texto.append(equipo.toString());
 
		return texto.toString();
	}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Kabuto (1381 intervenciones) el 19/11/2018 23:32:01
Ese método tan solo describe el partido (junto con equipos y jugadores) desde el que se invoca.
Ahora mismo, en el código solo se está guardando un único partido.

Si queremos almacenar varios partidos, necesitaremos un ArrayList.
1
2
3
4
5
public static void main(String[] args) throws IOException {
 
    Scanner sc=new Scanner(System.in);
    //PartidoBaby objPartido=new PartidoBaby(); //ESto solo almacena un partido
    ArrayList<PartidoBaby> partidos = new ArrayList<PartidoBaby>(); //Esto almacena todos los partidos que queramos

Al introducir la informacion de los partidos, primero crearemos un objeto auxiliar para ir introduciendo todos los datos.
1
2
3
4
5
case 1:
 
    PartidoBaby partido = new PartidoBaby();//Aqui iremos configurando los datos del partido que luego insertaremos en el ArrayList
    System.out.println("\nIngrese Datos Del Partido: ");
    System.out.println("----------------------------");


Y al final del proceso, cuando ya se ha introducido toda la info de equipos y jugadores, guardamos este objeto en el ArrayList.
1
2
3
4
partido.agregarEquipo(segundoEquipo);
/El partido ya esta configurado con los dos equipos y todos los datos. Guardamos en el ArrayList
partidos.add(partido);
break;

Vamos, que el "case 1" del switch quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
case 1:
 
    PartidoBaby partido = new PartidoBaby();//Aqui iremos configurando los datos del partido que luego insertaremos en el ArrayList
    System.out.println("\nIngrese Datos Del Partido: ");
    System.out.println("----------------------------");
    System.out.println("Ingrese la fecha: ");
    System.out.print("Dia del partido: ");
    byte d=Byte.valueOf(sc.nextLine());
    System.out.print("Mes del partido(Ingrese el numero del mes): ");
    byte m=Byte.valueOf(sc.nextLine());
    System.out.print("Año del partido(Agregar los dos ultimos digitos de 2000, por ejemplo: ingresa 10 se guarda 2010): ");
    byte a=Byte.valueOf(sc.nextLine());
    partido.setFecha(d,m,a);
    partido.getFecha();
    System.out.println("Ingrese los datos del Partido");
    System.out.print("Ingrese nombre del partido: ");
    partido.setNombre(sc.nextLine());
    System.out.println("Ingrese los equipos que participaran en el partido: ");
    System.out.println("Datos del primer equipo");
    System.out.print("Ingrese el nombre del equipo: ");
    String nomEquipo = sc.nextLine();
    System.out.print("Ingrese la ciudad del equipo: ");
    String ciudadEquipo = sc.nextLine();
 
    //Creamos primer equipo
    Team primerEquipo = new Team(nomEquipo, ciudadEquipo);
    System.out.println("*****************************");
    //Jugadores del  primer equipo
    for(int i=0;i<2;i++){
        System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
        System.out.println("------------------------------------");
        System.out.print("Ingrese el nombre del jugador: ");
        nomj=sc.nextLine();
        System.out.print("Ingrese el apellido del jugador: ");
        apej=sc.nextLine();
        System.out.print("Ingrese el tamaño del jugador: ");
        tamj=Float.parseFloat(sc.nextLine());
        System.out.println("------------------------------------");
        //Añadimos jugador al equipo
        primerEquipo.agregarJugador(new Player(nomj,apej,tamj));
    }
    //El equipo ya tiene jugadores, añadimos equipo al partido
    partido.agregarEquipo(primerEquipo);
 
    //Segundo equipo
    System.out.println("Datos del segundo equipo");
    System.out.print("Ingrese el nombre del equipo: ");
    nomEquipo = sc.nextLine();
    System.out.print("Ingrese la ciudad del equipo: ");
    ciudadEquipo = sc.nextLine();
    //Creamos segundo equipo
    Team segundoEquipo = new Team(nomEquipo, ciudadEquipo);
    System.out.println("*****************************");
    //Jugadores del  Segundo equipo
    for(int i=0;i<2;i++){
        System.out.println("Ingrese el jugador "+(i+1)+" del equipo");
        System.out.println("------------------------------------");
        System.out.print("Ingrese el nombre del jugador: ");
        nomj=sc.nextLine();
        System.out.print("Ingrese el apellido del jugador: ");
        apej=sc.nextLine();
        System.out.print("Ingrese el tamaño del jugador: ");
        tamj=Float.parseFloat(sc.nextLine());
        System.out.println("------------------------------------");
        segundoEquipo.agregarJugador(new Player(nomj, apej, tamj));
    }
    partido.agregarEquipo(segundoEquipo);
    //El partido ya esta configurado con los dos equipos y todos los datos. Guardamos en el ArrayList
    partidos.add(partido);
    break;


Y el case 2, donde listaremos todos los partidos que hayamos introducido, pues hay que modificarlo con un for "each" que recorra el ArrayList de PartidoBaby y muestre sus datos mediante su método toString();
Añadimos además una comprobación previa para ver si hay partidos generados o no antes de intentar listar nada.

1
2
3
4
5
6
7
8
case 2:
    System.out.println("\n\tLISTADO DE PARTIDOS\n");
    if (partidos.isEmpty())
        System.out.println("No hay partidos en el listado");
    else
        for (PartidoBaby parti: partidos)
            System.out.println(parti.toString());
    break;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Andres (5 intervenciones) el 20/11/2018 01:56:58
Si alguien supiera como modificar los datos de un jugador del arrayList ingresado, del código hecho por Kabuto.
O como eliminar un equipo de algún partido seria de mucha utilidad. Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Kabuto (1381 intervenciones) el 20/11/2018 22:23:06
Hola.
Hacer eso es fácil, lo que hace falta saber es como queremos que el usuario tenga acceso a esta opción.

Por ejemplo, para eliminar un equipo de un partido..
A la clase PartidoBaby hay que añadirle un método como este, o similar:

1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean eliminarEquipo(String nombreEquipo) {
		//REcorremos los equipos de la lista
		for (int i = 0; i < _listaTeam.size(); i++)
		{
			if (_listaTeam.get(i).getNombre().equals(nombreEquipo)) //A cada equipo de la lista, preguntamos si coincide el nombre
			{
				_listaTeam.remove(i); //Sí coincide, lo eliminamos
				return true; //Devolvemos true para indicar que el equipo ha sido encontrado y eliminado
			}
		}
 
		return false; //No se encontro ningún equipo con ese nombre
	}

A este método se le da un nombre de un equipo, y comprueba si ese equipo existe en el objeto PartidoBaby en cuestión.
Si existe, lo elimina y devuelve TRUE para confirmar que ha sido eliminado.
Si no existe, devuelve FALSE para informar de que no ha encontrado ningún equipo que coincida con ese nombre.

Vale, pero con esto no es suficiente. En la clase principal AppPartidoBaby habrá que crear otro método, que pida el nombre al usuario y una vez tenga el nombre del Equipo......pues ahora es cuando hay decidir como queremos hacer la búsqueda.
¿Antes de pedir el nombre del Equipo, queremos que el usuario nos diga también el nombre del Partido para que sepamos exactamente a que Partido en concreto se refiere?
¿O simplemente empezamos a recorrer todo el ArrayList de Partidos hasta que encontremos uno que tenga un Equipo con el nombre que nos han indicado?

Es que, en realidad, un Equipo podría estar en varios Partidos, así que supongo que lo lógico es que el usuario nos diga también a que Partido en concreto se refiere.
Si decidimos hacerlo así, habría que crear este método en la clase AppPartidoBaby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void eliminarEquipoDePartido()
	{
		System.out.print("\nIndique el nombre del PARTIDO: ");
		String nomPartido = sc.nextLine();
		System.out.print("\nIndique ahora el nombre del EQUIPO a eliminar: ");
		String nomEquipo = sc.nextLine();
		//Ahora buscamos el PARTIDO, para saber si lo hemos encontrado o no, nos servimos de un boolean
		boolean encontrado = false;
		for (int i = 0; i < partidos.size(); i++)
		{
			if (partidos.get(i).getNombre().equals(nomPartido)) //Partido encontrado
			{
				encontrado = true;
				//Intentamos eliminar equipo
				if (partidos.get(i).eliminarEquipo(nomEquipo)) //Si esto devuelve true, es que se encontró el equipo
					System.out.println("\nEQUIPO ELIMINADO!!");
				else
					System.out.println("\nNO se encontró el EQUIPO: " + nomEquipo);
			}
		}
		//Finalizado el bucle for, puede que no se haya encontrado el partido, y debemos informar
		if (!encontrado)
			System.out.println("\nNO se encontró el PARTIDO: " + nomPartido);
	}

Por cierto, si añades este método, verás que el compilador se queja porque no tiene acceso ni al objeto Scanner, ni tampoco al ArrayList de PartidoBaby.
Esto es porque estos dos elementos están declarados dentro del main() y por lo tanto, solo son visibles ahí dentro. El resto de métodos no pueden verlos, están fuera de su alcance(scope)

En programas donde vamos a servirnos de varios métodos para repartir tareas, es necesario que los datos más importantes del programa tengan alcance total para que los métodos puedan acceder a ellos.
Para conseguir esto, hay que declarar dichos datos fuera del main(), como si fueran atributos de la clase, y les añadimos la palabra reservada static ya que los métodos que quieren acceder a ellos (incluidos el main() ) van a ser de tipo estáticos.
Ahora la declaracion del ArrayList y el objeto Scanner quedaría tal que así:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class AppPartidoBaby {
 
	static Scanner sc=new Scanner(System.in);
	static ArrayList<PartidoBaby> partidos = new ArrayList<PartidoBaby>(); //Esto almacena todos los partidos que queramos
 
	public static void main(String[] args) throws IOException {
 
		int opc,s,e,p,t;
		String nomj="";
		String apej="";
		float tamj=0;
		do {
			.........

Ahora ambos objetos tienen el máximo alcance y cualquier método estatico podrá acceder a ellos para trabajar.

Y para terminar con lo de eliminar un partido, solo queda añadir en el switch la correspondiente opción para llamar a nuestro nuevo método.
Como no se el enunciado, yo lo pongo como la opción 3:
1
2
3
case 3:
	eliminarEquipoDePartido();
	break;

Respecto a modificar los datos de un jugador, surge una duda similar a la anterior.

Para modificar un Jugador, tendrán que darnos un nombre (quizás omitiremos pedir también apellido) para buscarlo.
Pero.., un Jugador, está dentro de un Equipo, y un Equipo puede estar dentro de varios Partidos.

Si nos indican también un Partido para encontrar al Jugador, este solo quedaría modificado en dicho Partido, no en el resto de Partidos donde pueda estar.
¿Quizás habría que revisar TODOS los Partidos para modificar al Jugador todas las veces que lo encontremos?

En fín, quizás no hace falta ser tan precisos. Total, esto es un ejercicio para practicar clases que integran clases y trabajar con ArrayList.

ASí que podemos pedir nombre del EQUIPO y nombre del JUGADOR. Y recorremos todos los PARTIDOS hasta encontrar el EQUIPO indicado, y ahí ya se intenta modificar el JUGADOR, si es que existe.

Lo primero, le "enseñamos" a la clase Team como hacer modificar un JUGADOR a través de su nombre:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public boolean modificarJugador(String nombre) {
		for (int i = 0; i < arrPlayer.size(); i++)
		{
			if (arrPlayer.get(i).getNombre().equals(nombre))//Jugador encontrado
			{
				//Mostramos datos y ofrecemos cambiarlos
				Scanner teclado = new Scanner(System.in);
				System.out.println("\n\t\tMODIFICAR JUGADOR\n");
 
				System.out.println("Datos actuales:" + arrPlayer.get(i).toString());
				System.out.print("\nNuevo NOMBRE: ");
				String nom = teclado.nextLine();
				System.out.print("\nNuevo APELLIDO: ");
				String ape = teclado.nextLine();
				System.out.print("\nNuevo TAMAÑO: ");
				float tama = Float.parseFloat(teclado.nextLine());
				arrPlayer.get(i).setNombre(nom);
				arrPlayer.get(i).setApellido(ape);
				arrPlayer.get(i).setTamanio(tama);
				//teclado.close() //Cerrar aqui este Scanner afectaría al Scanner de la clase principal.NO CERRAR
				return true;
			}
		}
		//No se ha encontrado el jugador
		return false;
	}

Es muy fácil.
REcibe el nombre del JUGADOR como argumento para buscarlo.
Si encuentra el JUGADOR, muestra sus datos actuales y pide los datos nuevos para modificarlo. Y devuelve TRUE para informar de su éxito.
Si no lo encuentra, devuelve FALSE.

Bien, Team ya sabe como modificar uno de sus Player

Ahora hay que explicarle a PartidoBaby como ha de hacer para buscar un Team y pedirle que modifique uno de sus Player
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean modificarJugador(String nombreEquipo, String nombreJugador)
	{
		for (int i = 0; i < _listaTeam.size(); i++)
		{ //Buscamos equipo
			if (_listaTeam.get(i).getNombre().equals(nombreEquipo))
			{
				if (_listaTeam.get(i).modificarJugador(nombreJugador))
					System.out.println("\nJUGADOR MODIFICADO!!!");
				else
					System.out.println("No se ha encontrado el jugador: " + nombreJugador);
				//Se haya modificado o no el JUGADOR, devolvemos TRUE porque al menos SI hemos encontrado el EQUIPO
				return true;
			}
		}
		//Finalizado el bucle for sin devolver TRUE, es que no hemos encontrado el equipo
		return false;
	}

Este recibe dos parametros, el nombre del equipo y el del jugador.
Busca el equipo, si lo encuentra, intenta modificar jugador pasandole el nombre.
Informa de si se ha conseguido modificar o no.
Se modifique o no, este método devolverá TRUE igualmente para informar de que al menos si se ha encontrado el equipo.
Si ni siquiera se ha encontrado el equipo, devolverá FALSE.

Vale, ahora la clase PartidoBaby, ya sabe buscar un Team, quien además también sabe como modificar un Player.

Tan solo falta decirle a la clase principal AppPartidoBaby como poner todo este proceso en marcha.

Igual que antes, escribimos un nuevo método específico para esta tarea.
Pedira nombre de EQUIPO y nombre de JUGADOR.
Recorrerá todos los PartidoBaby contenidos en su ArrayList, hasta que no queden más por recorrer, o hasta que encuentre uno que contenga el EQUIPO que buscamos.
A cada PartidoBaby contenido en el ArrayList, se le pasarán los parámetros para que intente modificar el JUGADOR.
Cuando uno de estos PartidoBaby devuelva TRUE al pasarle los parámetros, significará que SI ha encontrado el EQUIPO, aunque puede que no al JUGADOR.
Esto nos dará igual, si ha encontrado el EQUIPO dejaremos de buscar. La clase Team ya se habrá encargado de informar si no encontró al JUGADOR y si lo encontró, ya le habrá pedido datos al usuario.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static void modificarJugadordeEquipo()
	{
		System.out.print("\nIndique nombre del EQUIPO: ");
		String equipo = sc.nextLine();
		System.out.print("\nIndique nombre del JUGADOR a modificar: ");
		String jugador = sc.nextLine();
		//REvisamos todos los partidos, a cada uno, le pasaremos los datos a ver si alguno tiene el EQUIPO y JUGADOR indicado
		boolean encontrado = false;
		for (int i = 0; (i < partidos.size() && !encontrado); i++) //Finaliza cuando se han recorrido todos los partidos...
		{														   // o cuando se ha encontando el EQUIPO a  buscar	
			if (partidos.get(i).modificarJugador(equipo, jugador))
			{
				/*
				 * Si se cumple la condicion de este IF, es que SI hemos encontrado el EQUIPO
				 * Sin embargo, puede que NO se haya encontrado el JUGADOR.
				 * Esto último, nos da igual, el metodo modificarJugador() ya se encarga el solo
				 * de informar por pantalla si ha encontrado o no al JUGADOR.
				 * Aquí ahora mismo solo nos interesa saber si hemos encontrado el EQUIPO
				 */
				encontrado = true;
			}
		}
		if (!encontrado)
			System.out.println("\nNO se encontró el EQUIPO: " + equipo);
	}

Y, de nuevo, añadir opcion al switch y listos
1
2
3
4
5
6
case 3:
		eliminarEquipoDePartido();
		break;
case 4:
		modificarJugadordeEquipo();
		break;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Andres (5 intervenciones) el 20/11/2018 23:42:50
Kabuto te ganaste mi respeto, muchísimas gracias por responder a todas las preguntas hechas. Un crack :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con error, al usar arraylist

Publicado por Kabuto (1381 intervenciones) el 22/11/2018 00:23:14
Yo encantado.
Pero sobre todo espero que te sirva para aprender. No te quedes con dudas, pregunta lo que sea ;)

Aquí la clave es conseguir que cada clase sea lo más autosuficiente posible.

Por ejemplo, si necesitamos mostrar datos en pantalla de la clase Player, hay dos opciones:
A) Desde el main(), cogemos el objeto Player, extraemos los datos mediante sus "getter" y mostramos los datos.
B) A la clase Player, le creamos un método que se encargue de mostrar dichos datos en pantalla, así en el main() tan solo hay que invocar a este métdo.

Sin duda es mucho mejor la opcion B. Que sea la propia clase Player quien sepa como mostrarse en pantalla.

Y así con todo, ¿que tenemos que buscar un Player dentro de un Team? Pues vamos a enseñarle a la clase Team a buscar un Player pasándole simplemente un nombre de Player. Y que sea la propia Team quien busque el Player, que informe de si lo ha encontrado o no, si lo encuentra que presente datos, etc...
Evitemos tener que hacer toda esta tarea en el main().

Y muy importante saber manejarse con ArrayList.

Cuando le digo:
1
arrayTeam.get(0);
Ese get, me está dando un objeto Team.

Puedo guardarlo en una variable para referenciarlo y trabajar con él:
1
2
Team equipo = arrayTeam.get(0);
System.out.println("Nombre equipo: " + equipo.getNombre());

O bien, puedo trabajar directamente sobre él sin tener que referenciarlo previamente:
1
System.out.println("Nombre equipo: " + arrayTeam.get(0).getNombre());

Ambas posibilidades son válidas, podemos elegir una u otra según nos convenga. Pero lo importante es saber como pedirle al ArrayList que nos devuelva los objetos que tiene almacenados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar