Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Armonicufer en 9 Noviembre 2016, 14:38 pm



Título: Recorrer arraylist y eliminar elementos pares
Publicado por: Armonicufer en 9 Noviembre 2016, 14:38 pm
Hola es un Ejercicio de clase y estoy algo verde este es el anunciado

Edit: Ya tengo hasta la arte de pares , lo de suprimir los decimales mayores de 5 no tengo ni idea
1. Cree ArrayList de numeros, tanto enteros como decimales. Tiene que haber mil elementos.
Recorra la lista y elimine los pares y elimine los que tengan un numero decimal mayor de 5.


Citar
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);

      }

      int i = 0;

      for (; i < List1.size(); i++) {
         if (List1.get(i) instanceof Integer) {
            Integer aux = (Integer) List1.get(i);
            if (aux % 2 == 0) {
               List1.remove(i);
            }

         }

      }
      System.out.println(List1.size());
      System.out.println(List1);
      

         }

      }


Título: Re: Recorrer arraylist y eliminar elementos pares
Publicado por: MayTheLulzBeWithYou en 10 Noviembre 2016, 21:29 pm
Buenas noches,
si llevas poco tiempo programando lo primero que te recomiendo es que tengas siempre a mano la API de Java para ver todas las funciones disponibles de la clase que estás tocando.
Con estas funciones y dándole un poco de vueltas al coco conseguirás resolver prácticamente cualquier cosa que se te plantee.
Por otra parte, intenta ir familiarizándote con toda la jerga (conceptos) correspondientes. Créeme, esto te ahorrará muchos dolores de cabeza.

Te pongo un ejemplo:

En tu caso estás tratando con variables de tipo double, que es un tipo primitivo. Pero como sabrás en Java absolutamente todo son objetos (clases), de esta manera, el objeto correspondiente al tipo primitivo double es Double.
Por lo tanto miramos la descripción de dicha clase, para comprobar si existe alguna función que nos permita manipular los decimales:
https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html

En principio vemos que no tenemos la posibilidad de realizar las comprobaciones que nos pide el enunciado con estas funciones, por lo que tendremos que tirar de otra clase.
Observamos que hay una función llamada toString() cuya descripción dice: "Returns a string representation of this Double object."

De acuerdo, pues vamos a la clase String (clase correspondiente al tipo de la biblioteca estándar de java String) y vamos a revisar si tenemos alguna función que nos permitiese segmentar la parte decimal del resto del número para realizar la comprobación que nos piden:
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
Aquí se nos presenta esta función lastIndexOf(String str), cuya descripción dice: "Returns the index within this string of the last occurrence of the specified substring."
Por otro lado observamos que existe una función llamada substring(int beginIndex) que nos dice: "Returns a new string that is a substring of this string."

En este punto tenemos la posibilidad de obtener un entero con la posición de la cadena de texto que le proporcionemos. A su vez podemos extraer una cadena de texto (desde el índice de la cadena que hayamos escogido previamente hasta el final) de otra cadena más grande.
Para ello podríamos tomar el carácter "." (separador decimal) como referencia.

Te muestro un pequeño ejemplo donde verás como se juega con estas funciones
Citar
public static void main (String[] args){
      double x = 5.01234;
      double y = 15.5;

      String XtoS = Double.toString(x);
      String YtoS = Double.toString(y);

      System.out.printf("Valor X: %f\n",x);
      System.out.printf("Valor Y: %f\n",y);
      System.out.printf("Valor X toS: %S\n",XtoS);
      System.out.printf("Valor Y toS: %S\n",YtoS);

      int Xindex = XtoS.lastIndexOf(".");
      int Yindex = YtoS.lastIndexOf(".");
      
      int Xdecimal = Integer.parseInt(XtoS.substring(Xindex+1));
      int Ydecimal = Integer.parseInt(YtoS.substring(Yindex+1));

      System.out.printf("Decimales de X: %d\n",Xdecimal);
      System.out.printf("Decimales de Y: %d\n",Ydecimal);
   }