/** Programa simple que muestra el uso de arreglos **/ public class Moda { public static void main(String args[]) { // Solicita la cantidad de elementos al usuario int n = Keyboard.getNextInt("Cantidad de elementos: ", 1); // Crea un arreglo de esa cantidad de reales, los cuales estan numerados por un indice // que va desde 0 hasta n - 1. Cada elemento del arreglo es un double double[] valores = new double[n]; // Lee cada valor, uno a uno, los cuales estan en la posicion 0 hasta la posicion n - 1 for ( int i = 0; i < valores.length; ++i ) valores[i] = Keyboard.getNextDouble("Valor " + (i + 1) + ": "); // Utiliza el metodo estatico sort() de la clase Arrays que se encuentra en el // paquete java.util. Este metodo recibe un arreglo y ordena sus valores ascendentemente java.util.Arrays.sort(valores); // Almacena el valor de la primera moda encontrada en el conjunto, // util por si es la unica para evitar dos recorridos por el arreglo double primeraModa = 0.0; // Indica cuantas veces se repite la primera moda int vecesPrimeraModa = 0; // Cuenta la cantidad de modas encontradas int totalModas = 0; // Indica cuantas veces se repite el valor siendo procesado en el arreglo int vecesValorActual = 1; // Recorre el arreglo buscando valores modales for ( int i = 1; i < valores.length; ++i ) { if ( valores[i] == valores[i - 1] ) { ++vecesValorActual; if ( vecesValorActual > vecesPrimeraModa ) { vecesPrimeraModa = vecesValorActual; primeraModa = valores[i]; totalModas = 1; } else if ( vecesValorActual == vecesPrimeraModa ) { ++totalModas; } } else vecesValorActual = 1; } // Si solo tiene una moda, imprimirla if ( totalModas == 1 ) { System.out.printf("Valor modal: %.2f (%d veces)\n", primeraModa, vecesPrimeraModa); } else if ( totalModas > 0 && totalModas < valores.length / vecesPrimeraModa ) { // Hay varios valores modales, imprimirlos System.out.printf("%d valores modales encontrados (%d veces cada uno):\n" , totalModas, vecesPrimeraModa); // Recorre el arreglo buscando valores modales vecesValorActual = 1; for ( int i = 1; i < valores.length; ++i ) { if ( valores[i] == valores[i - 1] ) { ++vecesValorActual; if ( vecesValorActual == vecesPrimeraModa ) System.out.printf("%.2f\n", valores[i]); } else vecesValorActual = 1; } } else { System.out.printf("No hay moda: todos los valores tienen la misma ocurrencia\n"); } } }