Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Ruusa en 17 Marzo 2021, 00:33 am



Título: remove no funciona
Publicado por: Ruusa en 17 Marzo 2021, 00:33 am
Hola buenas noches. Tengo un problema para eliminar elementos de un arraylist.
Cuando llamo al metodo remove no funciona. No borra el elemento deseado.

Código
  1. boton.addActionListener(new ActionListener() {
  2. public void actionPerformed(ActionEvent e) {
  3. try {
  4. if (indice < miControl.jugador(nombreJ).cartasEnMano.size()) {
  5. r=indice;
  6. ImageIcon imagen = new
  7. ImageIcon(miControl.jugador(nombreJ).cartasEnMano.get(indice)+".jpg");
  8. cartaNum.setText("Carta numero: "+ indice);
  9. btn.setIcon(new
  10. ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
  11. indice++;
  12.  
  13. }else {
  14. indice=0;
  15. r=0;
  16.  
  17. }
  18.  
  19. }
  20.  
  21.  
  22. catch (RemoteException e1) {
  23. // TODO Auto-generated catch block
  24. e1.printStackTrace();
  25. }
  26.  
  27. }
  28. });
  29.  
  30. boton3.addActionListener(new ActionListener() {
  31. public void actionPerformed(ActionEvent e) {
  32. try {
  33.  
  34. miControl.tirarCarta(r,miControl.jugador(nombreJ));
  35. indice=0;
  36. r=0;
  37. }
  38.  
  39. else {
  40.  
  41. }
  42. }
  43.  
  44.  
  45.  
  46. public void tirarCarta( int op, Jugador j) throws RemoteException {
  47. //op va a ser la carta a tirar y jugador va a ser el jugador que la tira
  48. mesa.add(j.cartasEnMano.get(op));
  49. j.cartasEnMano.remove(j.cartasEnMano.get(op));
  50.  
  51.  
  52. }


Si alguien me puede ayudar se lo agradeceria

MOD: Etiqueta GeSHi


Título: Re: remove no funciona
Publicado por: K-YreX en 18 Marzo 2021, 07:10 am
Supongo que <cartasEnMano> es un ArrayList<> de algún tipo de objeto que has creado tú, no?

Cuando se utiliza ArrayList.remove(Object o), se elimina el objeto i del array que cumpla Objects.equals(o, array.get(i)). En resumen, necesitas sobreescribir el método equals() para determinar cuándo dos objetos son iguales ya que si no lo haces sólo serán iguales cuando sean el mismo objeto (misma dirección de memoria).

Otra solución más sencilla si ya tienes el índice es usar ArrayList.remove(int index).
Código
  1. j.cartasEnMano.remove(op)
Además de más sencillo, es más seguro pues te aseguras de tirar exactamente la misma y no otra que sea igual a esa.

PD: Utiliza las etiquetas de Código GeSHi para el código ya sea abriendo el desplegable que se llama "Código GeSHi" y eligiendo Java o escribiendo directamente:
[code=java]
Tu código Java aquí
[/code]


Título: Re: remove no funciona
Publicado por: rub'n en 18 Marzo 2021, 13:32 pm
Ah @Ruusa se le habla un par de veces sobre el GeSHI

(https://3.bp.blogspot.com/-O6qDroNEzts/W8sWHPnV3MI/AAAAAAAADJw/mypp_PTYxbA_uKr7E-O-x0epDjSUdk3mwCK4BGAYYCw/s1600/geshi.gif)


Título: Re: remove no funciona
Publicado por: Ruusa en 19 Marzo 2021, 23:16 pm
Supongo que <cartasEnMano> es un ArrayList<> de algún tipo de objeto que has creado tú, no?

Cuando se utiliza ArrayList.remove(Object o), se elimina el objeto i del array que cumpla Objects.equals(o, array.get(i)). En resumen, necesitas sobreescribir el método equals() para determinar cuándo dos objetos son iguales ya que si no lo haces sólo serán iguales cuando sean el mismo objeto (misma dirección de memoria).

Otra solución más sencilla si ya tienes el índice es usar ArrayList.remove(int index).
Código
  1. j.cartasEnMano.remove(op)
Además de más sencillo, es más seguro pues te aseguras de tirar exactamente la misma y no otra que sea igual a esa.

PD: Utiliza las etiquetas de Código GeSHi para el código ya sea abriendo el desplegable que se llama "Código GeSHi" y eligiendo Java o escribiendo directamente:
[code=java]
Tu código Java aquí
[/code]



Hola muchas gracias. Intente eso y sigue sin funcionar. Nose que esta pasando. no me anda ningun metodo del arraylist cuando lo llamo dentro de ese metodo. Es muy raro