Elimninar datos en un arreglo de java

Espero que te encuentres bien, ¿cómo pudiera hacer para eliminar algún gimnasta?
public class Equipo {
public String nombre;
private Atleta[] gimnastas;
private Entrenador[] entrenadores;
private int cantidadEntrenadores=0;
private int cantidadGym=0;
public Equipo(int tamanio){
gimnastas = new Atleta[tamanio];
entrenadores =new Entrenador[tamanio];
}
//retorna el nombre de equipo
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
//ingresa Atletas (Arreglo de Atletas)
public void ingreseAtleta(Atleta nuevo){
gimnastas[cantidadGym]= nuevo;
cantidadGym++;
}
//busca Atletas segun el numero unico
public Atleta buscar(int numero){
for(int i=0;i<gimnastas.length; i++){
numero =gimnastas.getNumUnico();
return gimnastas;
}
return null;
}
//returna un atleta
public Atleta[] getGimnastas() {
return gimnastas;
}
public int getCantidadGym() {
return cantidadGym;
}
Respuesta
1
¿Es obligatorio el uso de un arreglo? Porque eliminar algo de un arreglo no es sencillo ni limpio. Lo ideal sería usar ArrayList. Si es obligatorio o prefires seguir usando un arreglo se haría así de varias maneras:
1) Convertir el arrreglo a Arraylist, eliminar el atleta y volver a convertirlo en arreglo
public eliminarAtleta(Atleta atleta, Atleta[] gimnastas){
ArrayList listaGimnastas = (ArrayList) Arrays.asList(gimnastas); //Convertimos
listaGimnastas.remove(atleta); //Eliminamos el atleta concreto
gimnastas = (Atleta[]) listaGimnastas.toArray(new Atleta[listaGimnastas.size()]); //Cambiamos el arreglo por el nuevo sin el atleta borrado
}
2) Si no podemos o queremos usar Arraylists, se elimina del arreglo y se mueven todos los atletas despues de el una posicion a la izquierda
public eliminarAtleta(Atleta atleta, Atleta[] gimnastas){
// buscamos el atleta a eliminar
int posicionEliminar =0;
for (int i=0;i<gimnastas.length<i++){
if (gimnastas[ i ].equals(atleta)) {
     posicionEliminar = i;
     i = gimnastas.length; // Asi hacemos terminar el bucle
     }
}
if ( (posicionEliminar!=0) ) { //Si el atleta existe
       gimnastas[ posicionEliminar ] = null; // Lo borramos
       for (int j=posicionEliminar ; j<cantidadGym;j++) // Movemos los que estén despues
                gimnastas[ j ] = gimnastas[ j+1 ] ;
       cantidadGym = cantidadGym - 1 ; // Reducimos el numero de gimnastas
}
}
Se podría hacer de muchas otras maneras. Lo importante es que entiendas cómo funcionan estas 2 para poder hacerlo de otra manera si lo prefieres.
Espero que te sirva. Recuerda cerrar la pregunta.
Hola! Tengo otra pregunta respecto al mismo código si yo quiero eliminar un gimnastas tiene que a ver un método que me pide el algún dato del gimnasta para elimniarlo en este caso seria el numero único que se le otorga a cada gimnasta
Yo hice un método para leer el gimnasta
Es el siguiente:
private Atleta Leer() throws IOException {
do {
int Numero =Integer.parseInt(JOptionPane.showInputDialog("Digite el numero Unico del Gimnasta: \nEjemplo: 008"));
Atleta atleta = equipo.buscar(Numero);
if (atleta != null) {
return atleta;
} else {
JOptionPane.showMessageDialog(null,"Atleta no registrado con dicho Numero Unico");
}
} while (true);
}
El método buscar esta declarado en el código anterior de la clase equipo pero lo vuelvo a imprimir:
public Atleta buscar(int numero){
for(int i=0;i<gimnastas.length; i++){
numero =gimnastas.getNumUnico();
return gimnastas;
}
return null;
}
La pregunta es que como hago para eliminar un atleta del arreglo que no puede ser arraylist es que la profe nos dijo que usáramos los que tiene un tamaño especifico, ¿cómo lo elimino o borro del arreglo según el numero único?
en si lo que quiero hacer es
que el usurio digite el numero unico eso lo hace el metodo leer();
despues que segun el numero unico si pertence algun atleta lo elimine;
Agradeceré tu Respuesta...! Buenas Tardes
Sinceramente no entiendo ese método de "buscar". No me explico cómo te puede funcionar. Te explico lo que veo mal en él:
public Atleta buscar(int numero){  // El metodo devuelve un Atleta
for(int i=0;i<gimnastas.length;u++){// Usas un bluce for con índice i, pero no usas la i dentro del bucle
numero =gimnastas.getNumUnico();  // No se lo que hace getNumUnico() pero no creo que se pueda llamar así, ya que gimnastas es un array, y no puede tener ese metodo
return gimnastas; // Devuelves el array, cuando el metodo debe devolver un solo Atleta, y lo devuelves siempre, no veo una condición para devolverlo o no
}
return null;
}
Lo lógico sería algo así:
public Atleta buscar(int numero, Atleta[] gimnastas){ //No se deben usar variables globales, le pasamos el array tambien

for (int i=0;i<gimnastas.length;i++){
Atleta atleta = gimnastas[ i ]; //Cogemos cada atleta
if (atleta.getNumeroUnico() == numero) return atleta; //Si es el buscado se devuelve
}
return null; // Si no era ninguno, no está
}
Con este método ya tienes el atleta, y puedes usar el método 2) que te puse antes para eliminarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas