Foro sobre Java SE > Eliminar elementos pares de un arraylist
Bueno... a ver... por donde empiezo. Lo primero que debes hacer, es rellenar el arraylist con 500 enteros y 500 doubles, bien, eso lo haces bien, eso corresponde a:
ArrayList List1 = new ArrayList();
for (int x = 0; x < 500; x++) {
int numero = ThreadLocalRandom.current().nextInt(1, 500 + 1);
double numero2 = ThreadLocalRandom.current().nextDouble(500, 1000 + 1);
List1.add(numero);
List1.add(numero2);
}
y ya esta, ahí terminaría tu primer bucle for, ahora que esta relleno, te dicen, que debes eliminar los elementos pares y los que su parte decimal sea mayor a 5.
Pues bien, ahora creamos otro bucle diferente para hacer esas comprobaciones, ese bucle ira desde el primer elemento del ArrayList hasta el ultimo. Pues :
for(int i=0;i<List1.size();i++){
}
Ahora dentro de ese segundo bucle, deberías comprar cada elemento y si es par eliminarlo.
Para obtener un elemento de un arraylist por su posición, se usa el método:
List1.get(posicion)
Para eliminarun elemento de un arraylist por su posicion, usa el metodo:
List1.remove(posicion)
Y nada, te dejo para lo que termines tu, pero eso haz las cosas por partes, no todo a la vez, primero una y después otra, Primero añade, Después elimina. En tu caso intentas añadir y eliminar a la vez, ademas eliminas si el elemento esta en una poosición par del arraylist, Y según tu enunciado, debes eliminar el elemento si es par. Tu estas eliminando los elementos que estan en posiciones pares del arraylist.
Bueno intentalo, y si no te sale o lo que sea ya nos cuentas. Un saludo.
Gracias por contestar
El codigo si me dejase el eclipse seria asi
for (int i = 0; i < List1.size(); i++) {
if (List1.get(i) % 2 == 0) {
List1.remove(i);
}
Pero en la condicional del if me pone que el get no es compatible con el operador % y nose de que otra forma lo puedo solucionar
Hola, el problema ese viene porque tu estas creando un ArrayList de object(Clase padre de todas las clases), el básico, lo haces bien, ya que para meter objetos de distinto tipo(en tu caso, integer y doubles), no te queda otra que usar ese ArrayList.
El problema viene, cuando intentas obtener un elemento del arraylist, ya que ser el arraylist de Object, lo que este devuelve son Objects, y para java un Object % 2 no tiene sentido y por eso te dice eso.
Para resolverlo, lo primero que debes hacer, es saber si el elemento es un Integer, o por el contrario es un Double, ya que son los dos tiposde elementos que hay dentro de tu arraylist. Para averiguar de que tipo es el elemento, puedes usar el operador Instanceof.
Permite saber si un objeto es de un tipo, para usarlo seria algo así:
if(List1.get(i) instanceof Integer){
lokesea
}
Eso te serviría para saber de que tipo es el elemento y según sea de un tipo u otro, pues
crearias una variable de ese tipo donde almacenarías el elemento obtenido del el arraylist. Para el caso del integer seria algo así:
if(List1.get(i) instanceof Integer){
Integer aux=List1.get(i);
}
Y ahora que ya tienes un objeto operable, si puedes hacer lo de:
if(List1.get(i) instanceof Integer){
Integer aux=List1.get(i);
if(aux%2==0){
List1.remove(i);
}
}
Bno dale caña a ver que tal. Un saludo
Es un ejercicio de clase , crear 1000 elementos en arraylist enteros y doubles y eliminar los pares y los que tengan numero decimal mayor de 5 , soy algo novato y no consigo eleiminarlos este e smi codigo en que falla ?
import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;
public class Ejecutable {
public static void main(String[] args) {
ArrayList List1 = new ArrayList();
for (int x = 0; x < 500; x++) {
int numero = ThreadLocalRandom.current().nextInt(1, 500 + 1);
double numero2 = ThreadLocalRandom.current().nextDouble(500, 1000 + 1);
List1.add(numero);
List1.add(numero2);
if(x % 2 == 0)
List1.remove(x);
}
System.out.println(List1);
System.out.println(List1.size());
}
}