Ejercicios Resueltos con ArrayList en Java


Cómo calcular la suma y la media aritmética de los valores contenidos en un ArrayList.

Programa Java que lea una serie de valores numéricos enteros desde el teclado y los guarde en un ArrayList de tipo Integer. La lectura de números enteros termina cuando se introduzca el valor -99. Este valor no se guarda en el ArrayList. A continuación el programa mostrará por pantalla el número de valores que se han leído, su suma y su media. Por último se mostrarán todos los valores leídos, indicando cuántos de ellos son mayores que la media.
Solución:

Para resolverlo vamos a utilizar 3 métodos además del método main:
Método leerValores(): pide por teclado los números enteros y los almacena en el ArrayList. La lectura acaba cuando se introduce el valor -99. El método devuelve mediante return el ArrayList con los valores introducidos.
Método calcularSuma(): Recibe como parámetro el ArrayList con los valores numéricos y calcula y devuelve su suma. En este método se utiliza un Iterator para recorrer el ArrayList.
Método mostrarResultados(): Recibe como parámetro el ArrayList, la suma y la media aritmética. Muestra por pantalla todos los valores, su suma y su media y calcula y muestra cuantos números son superiores a la media. En este método se utiliza un for para colecciones para recorrer el ArrayList.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class Main {

   public static void main(String[] args) {
         ArrayList<Integer> array = leerValores();
         double suma = calcularSuma(array);
         double media = suma / array.size();
         mostrarResultados(array, suma, media);
   }

   //pedir por teclado los valores y guardarlos en el ArrayList
   //la lectura acaba cuando se introduzca -99
   public static ArrayList<Integer> leerValores() {
        ArrayList<Integer> valores = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        int n;
        System.out.print("Introduce entero. -99 para acabar: ");
        n = sc.nextInt();
        while (n != -99) {
                 valores.add(n);
                 System.out.print("Introduce entero. -99 para acabar: ");
                 n = sc.nextInt();
        }
        return valores;
   }

   //recorrer el ArrayList y sumar todos sus elementos
   public static double calcularSuma(ArrayList<Integer> valores) {
         double suma = 0;
         Iterator it = valores.iterator();
         while (it.hasNext()) {
                  suma = suma + (Integer) it.next();
                 //next() devuelve un dato de tipo Object. Hay que convertirlo a Integer
         }
         return suma;
   }

   //Mostrar valores, su suma y su media aritmética
   //y cuántos hay superiores a la media
   public static void mostrarResultados(ArrayList<Integer> valores, double suma, double media) {             
         int cont = 0;
         System.out.println("Valores introducidos: ");
         System.out.println(valores);
         System.out.println("Suma: " + suma);
         System.out.printf("Media: %.2f %n", media);
         for (Integer i : valores) {
               if (i > media) {
                  cont++;
              }
         }
      System.out.println(cont + " valores superiores a la media");
   }
}

11 comentarios:

  1. public static void main(String[] args) {
    // TODO Auto-generated method stub

    ArrayList array = leerValores();
    calcularSuma(array);

    }

    private static void calcularSuma(ArrayList array) {
    // TODO Auto-generated method stub
    int suma=0;
    for (int i = 0; i < array.size(); i++) {
    suma = suma + array.get(i);
    }
    System.out.println("la suma total es igual a "+suma);
    System.out.println("Su media es igual a "+(suma/array.size()));

    }

    private static ArrayList leerValores() {
    // TODO Auto-generated method stub
    ArrayList listMedia = new ArrayList();
    int numero;
    int i=0;
    do {

    numero=Integer.parseInt(JOptionPane.showInputDialog("Introduzca el numero"));
    listMedia.add(numero);

    if (listMedia.get(i)==-99) {
    listMedia.remove(listMedia.get(i));
    }else {
    System.out.println(listMedia.get(i));
    i++;
    }
    } while (numero!=-99);

    return listMedia;
    }

    ResponderEliminar
  2. Enrique,

    No entiendo cual es la diferencia en usar un Iterator y no un bucle for o for-each para leer el arrayList y sumar sus valores (?)
    Podras hacerme una breve explicacion?

    Mil gracias

    ResponderEliminar
    Respuestas
    1. No creo tenga nada especial mas que lucir un poco fashion

      Eliminar
    2. El Iterador es un patrón de diseño, lo que hace es encapsular la lógica para recorrer un arreglo e ir devolviendo el siguiente elemento que corresponda

      Eliminar
  3. Yo estoy practicando el tema de ArrayList y sé que no es la mejor forma pero yo lo hice de la siguiente manera y me gustaría compartirlo.

    public static void main (String [] args) {
    ArrayList numeros = leerValores();
    mostrarDatos(numeros);
    }

    public static ArrayList leerValores() {
    ArrayList valores = new ArrayList();
    int valor;
    Scanner sc = new Scanner (System.in);

    System.out.println("Introduce un número \nSi deseas salir de programa pulsa -99");
    valor = sc.nextInt();

    while (valor != -99) {
    valores.add(valor);
    System.out.println("Introduce un número \nSi deseas salir de programa pulsa -99");
    valor = sc.nextInt();
    }

    return valores;
    }

    public static double suma(ArrayList valores) {
    double suma = 0;

    Iterator it = valores.iterator();

    while(it.hasNext()) {
    suma += (Integer) it.next();
    }

    return suma;
    }

    public static double media(ArrayList valores){
    double suma = 0;
    double media = 0;

    Iterator it = valores.iterator();

    while(it.hasNext()) {
    suma += (Integer) it.next();
    }

    media = suma/valores.size();

    return media;
    }

    public static void mayoresMedia(ArrayList valores){
    for (Integer i: valores) {
    if (i > media(valores)) {
    System.out.println(i);
    }
    }
    }

    public static void mostrarDatos(ArrayList valores){
    System.out.println("Valores ingresados: "+valores);
    System.out.println("Número de valores ingresados: "+valores.size());
    System.out.println("Suma: "+suma(valores));
    System.out.println("Media: "+media(valores));
    System.out.println("Valores mayores a la media: ");
    mayoresMedia(valores);
    }

    ResponderEliminar
  4. Y para saber los numeros menores a la media como seria?

    ResponderEliminar
  5. El profesor del semestre desea hacer un reconocimiento de una lista de estudiantes. A los 3 primeros puestos de acuerdo al promedio del semestre, teniendo en cuenta las tres notas de cada uno de los cortes. Al final el programa debe mostrar:
    Quienes ocupan los 3 primeros puestos
    Cual es el promedio del semestre del grupo de estudiantes
    Quienes ganan el semestre
    Quienes lo pierden

    ResponderEliminar
  6. Hacer un programa que realice una prueba de cálculo mental. El usuario debe primero ingresar varios números aleatorios hasta ingresar un -1 para terminar en solicitar números y luego ingresar el valor que debe ir sumando todos los números de la lista de uno en uno hasta que se equivoque o termine la lista, en cuyo caso ganará.

    ResponderEliminar
  7. package ArraysList;

    import java.util.ArrayList;
    import java.util.Scanner;

    public class lee_valores_numericos {
    private static int condicion = 0;
    private static int valor, sumaTotal;
    private static double mediana;
    private static int superior, inferior;
    private static ArrayList lista = new ArrayList();
    public static void main(String[] args) {
    leerValores();
    calculaMedia();
    mostrarResultados();
    }
    public static void leerValores() {
    while(condicion!=-99) {
    System.out.println("Introduce un numero ");
    Scanner sc = new Scanner(System.in);
    condicion = sc.nextInt();
    if(condicion == -99) {
    break;
    }
    lista.add(condicion);
    lista.forEach(elemento ->{
    System.out.println(elemento);


    });


    }
    }
    public static double calculaMedia () {
    lista.forEach(elemento ->{
    sumaTotal += elemento;

    });
    valor = lista.size();
    mediana = sumaTotal/valor;
    lista.forEach(elemento ->{
    if(elemento>mediana) {
    superior++;
    }else {
    inferior++;
    }
    });
    return mediana;

    }

    public static void mostrarResultados () {
    System.out.println("La media es: " + mediana);
    System.out.println("La suma total de todos los números ingresados es " + sumaTotal);
    System.out.println("-------------------------");
    System.out.println("Los valores superior a la media son: " + superior);

    System.out.println("Los valores Inferior a la media son: " + inferior);
    System.out.println("-------------------------");


    }


    }

    ResponderEliminar
  8. la mejor forma es crear Una clase y que el ArrayList sea una propiedad y luego hacer metdos que lo llenen ya sea pidiendo datos al Usuario o llenando con valores aleatorios y luego metodos para calcular lo que se pida y otro para mostrar los resultados eso es programacion orientada A Objetos (POO) lo cual garntiza reutilizacion de solucion y /o sus metodos podria incluso usar Herencia para extender su funcionalidad

    ResponderEliminar