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:
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");
}
}
public static void main(String[] args) {
ResponderEliminar// 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;
}
Genial, mil gracias!
EliminarEnrique,
ResponderEliminarNo 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
No creo tenga nada especial mas que lucir un poco fashion
EliminarEl 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
EliminarYo 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.
ResponderEliminarpublic 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);
}
Y para saber los numeros menores a la media como seria?
ResponderEliminarEl 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:
ResponderEliminarQuienes ocupan los 3 primeros puestos
Cual es el promedio del semestre del grupo de estudiantes
Quienes ganan el semestre
Quienes lo pierden
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á.
ResponderEliminarpackage ArraysList;
ResponderEliminarimport 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("-------------------------");
}
}
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