Vamos por partes.
Tu clase
JugadorDeBasquet, en principio, es correcta.
La siguiente clase
EquipoDeBasquet, hay cosas que corregir.
Esta clase, no tiene que heredar de
JugadorDeBasquet.
Si hacemos eso, estamos diciendo que un equipo, es además, un jugador... y eso no tiene sentido.
Entre estas dos clases, hay una relación, pero no es una relación de herencia.
Es una
relación de agregación.
Un equipo se compone de jugadores, pero un equipo no es un jugador.
Para este tipo de relación no se necesita ninguna instrucción ni palabra clave.
Simplemente basta con el atributo ArrayList de objetos
JugadorDeBasquet. Con esto ya estamos diciendo que un Equipo se compone de Jugadores.
El atributo ArrayList, mejor si lo ponemos como private. Y también mejor si no tiene getter ni setter.
Los getter y setter no son obligatorios para cada atributo de la clase. Especialmente los que son colecciones de datos como ArrayList, HashMap, Vector, etc..., excepto en casos concretos, no vamos a necesitar ni desear devolver la colección completa con un get, ni tampoco dar opción de sustituirla por completo mediante un set.
Si no hay algún motivo de peso, es mejor que no tengan ni get ni set.
El método para agregarJugador es correcto.
Pero el de eliminar jugador requiere alguna corrección.
Fíjate que el enunciado dice que ha de devolver verdadero o falso, así que ha de ser de tipo boolean.
Y dice que ha de recibir un
JugadorDeBasquet, no un int a modo de indice.
Así que el método correcto sería este:
Escrito así, el ArrayList busca en su interior si tiene un
JugadorDeBasquet equivalente al recibido por parámetro e intenta eliminarlo.
Su propio método remove() ya es boolean, así que retornamos el resultado de intentar borrar el jugador.
Pero aquí se nos presenta un problema importante.
¿Cómo sabe el ArrayList cuándo un
JugadorDeBasquet es equivalente a otro?
Pues la verdad es que no lo sabe, así que probablemente no funcione bien esto.
Tenemos que decidir nosotros cuándo dos
JugadorDeBasquet son equivalentes, y para esto, tenemos que volver a la clase
JugadorDeBasquet y sobreescribir el método equals().
Sobreescribiendo este método, podemos decidir cómo se han de comparar dos objetos
JugadorDeBasquet para decidir si son equivalentes o no.
Para esta clase, puesto que el único atributo identificativo que tenemos es el nombre del jugador, pues esa será la condición para decidir si son equivalentes o no.
Así que a la clase
JugadorDeBasquet le agregamos este método:
Con esto, ahora el ArrayList si sabrá comparar
JugadoresDeBasquet y determinar si son iguales o no.
Ahora el método másTriples(), vamos a completarlo.
Primero hacer notar que el enunciado es un poco incongruente. Dice que el método ha de imprimir en pantalla el nombre del jugador, así que podemos suponer que es de tipo void. Pero luego habla de retornar un jugador...¿en qué quedamos?
Puesto que lo único que se desea es sacar por pantalla su nombre, yo optaría por no retornar nada y dejarlo como void.
Importante, tú has puesto que reciba por parámetros un array de jugadores.
Este método no necesita recibir nada, tan solo tiene que acceder al ArrayList de
JugadorDeBasquet. Y tiene acceso garantizado porque ese ArrayList es un atributo de su clase. Así que no necesita recibir nada.
Basta con recorrer el ArrayList, por ejemplo con un
for each.
En una variable guardaremos el máximo de triples encontrado hasta el momento, comienza con valor 0.
En otra, el nombre del jugador que supere ese máximo.
Iremos preguntando por cada jugador si tiene más triples que el máximo actual registrado.
En caso negativo, no hacemos nada y pasamos al siguiente.
En caso afirmativo, guardamos el nombre de este jugador y actualizamos el máximo de triples con el nuevo valor.
Cuando el bucle haya recorrido todos los jugadores, ya tendremos los datos que necesitamos.
Y ya está. La clase
EquipoDeBasquet no necesita ningún otro método más, así que se quedaría así:
Pasemos al programa principal.
Hay que crear dos equipos, incorporarle jugadores y mostrar cuáles tienen más triples.
Bien, en ningún momento se dice que esto se tenga que hacer por teclado.
Pero supongo que eso lo hace más interesante.
Antes de empezar, puesto que para crear un jugador necesitamos nombre y cantidad de triples, nos puede facilitar la tarea añadirle a la clase
JugadorDeBasquet un constructor que reciba estos dos parámetros. Así podemos crear jugadores rápidamente.
Y también otro que solo requiera el nombre. Ambos nos pueden ser útiles.
Lo mismo con
EquipoDeBasquet, un constructor que directamente acepte el nombre del equipo:
Por otro lado, otra cosa que puede ser interesante contemplar, es que un equipo solo puede tener 5 jugadores titulares. La clase
EquipoDeBasquet no está controlando esto, así que se pueden añadir jugadores sin límite.
No debería ser así, y propongo que cambiemos el método
incorporarJugadorTitular() a tipo boolean. Y que compruebe cuantos jugadores hay ya incorporados y devuelva false cuando ya se tengan los 5 titulares.
Listo. Ahora podemos meternos con el programa principal.
Hay tres opciones: incorporar, eliminar y mostrar triples.
Bien, de cada opción debería encargarse un método separado.
Y como los dos primeros van a requerir usar el Scanner para leer por teclado, mejor entonces si el Scanner lo declaramos fuera del método main(), para que sea un atributo global y todos los métodos de esta clase puedan acceder a él.
Si lo declaramos dentro del main(), entonces el Scanner solo será visible dentro de este.
Lo mismo con los objetos EquiposDeBasquet, los podemos declarar en el ámbito global, para que tengan plena visibilidad dentro de la clase.
El switch ha de contemplar las tres opciones, también la cuarta opción (que pulse 0 para salir) donde mostraríamos un mensaje indicando el fin del programa y también la posibilidad de que pulse un número no válido (default).
El método para incorporar Jugador ha de pedir nombre, triples y en que equipo quiere incorporarlo.
E informará si se pudo incorporar o no.
El método para eliminar bastará con que pida un nombre. El método intentará eliminarlo del equipo1 y si no es posible, del equipo 2.
E informará si se eliminó, o si no lo ha hecho (porque no lo ha encontrado en ningún equipo.
El método de mostrar triples es muy sencillo. Solo mostrar un par de mensajes en pantalla.
Y con esto, ya funcionaría todo.
Pruébalo y pregunta lo que no entiendas.
Un saludo