05 noviembre 2017

Laboratorio de programación Nro. 10 - Métodos y arreglos.

Al finalizar esta activdad, usted estará en la capacidad de:

El problema que debe resolver ahora es el siguiente: Elabore un programa en Java que, a través de métodos, cuente cuántos elementos de una lista de 5 números enteros son mayores que el promedio.

Para resolver este problema se debe hacer lo siguiente:

1. Representar los datos

El problema habla de un grupo de 5 números, por lo tanto se usará un arreglo para almacenar esos valores. En Java el arreglo se declara así:

int[] arr = new int[5]; 
2. Ingreso de datos

Los datos serán ingresados por el usuario del programa, es por ello que se ha implementado el siguiente código:

Scanner l = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
    System.out.printf("Ingrese elemento[%d]: ", i);
    arr[i] = l.nextInt();
}

No olvide que para poder usar el objeto Scanner es necesario importarlo desde el paquete util, así:

import java.util.Scanner;
3. Construcción de métodos

El programa contará con 3 métodos. El primero será el método principal que cumple el rol de "director de orquesta" ya que es el responsable de dirigir a los otros métodos. El segundo método permitirá calcular la suma total de los números. El tercer método contará cuántos elementos son mayores que el promedio.

Observe el método que hace la suma:

public static int sumar(int[] a) {
    int resultado = 0;

    for (int i = 0; i < a.length; i++) {
        resultado = resultado + a[i];
    }
    return resultado;
}

Este método es estático por que necesita ser llamado desde un entorno estático como el método main, devuelve un número entero los elementos serán enteros y por lo tanto la suma será de ese tipo de dato. Al leer ese método se puede leer fácilmente cual es su cometido y cómo lo consigue. Observe como no pide que se ingresen datos y tampoco presenta resultados por pantalla, en su lugar utiliza parámetros como entrada y devuelve un valor como salida. Esas características son imprescindibles en todos los métodos.

Ahora revise el método que cuenta los elementos que son mayores al arreglo.

public static int contarMayorProm(double prom, int[]a) {
    int contador = 0;

    for(int i = 0; i < a.length; i ++) {
        if(a[i] > prom) {
            contador = contador + 1;
        }
    }
    return contador;
}

Al igual que el método anterior, es estático, recibe parámetros para evitar el ingreso de datos y devuelve un valor para evitar imprimir en pantalla. Es también un método de fácil lectura ya que es concreto en su accionar.

Tal vez ahora mismo se este preguntando ¿porqué no existe un método calcular promedio? La respuesta no es sencilla, pero usé el siguiente argumento: si ya tengo la suma de los elementos el calcular el promedio es una simple división y al ser una operación concreta no existe necesidad de crear un método. Pero existe la posibilidad de realizar la suma y luego el la división (promedio), eso es verdad ¿Se anima a implementarlo?

Finalmente el método principal:

public static void main(String[] args) {
    int[] arr = new int[5];
    int suma;
    double prom;
    int mayorProm;
    Scanner l = new Scanner(System.in);
    
    for (int i = 0; i < arr.length; i++) {
        System.out.printf("Ingrese elemento[%d]: ", i);
        arr[i] = l.nextInt();
    }

    suma = sumar(arr);
    System.out.printf("Suma =  % d\n", suma);

    prom = suma / (double)arr.length;
    System.out.printf("Promedio = %f\n", prom);

    mayorProm = contarMayorProm(prom, arr);
    System.out.printf("%d elementos son mayores al promedio\n", mayorProm);

}

Note como en ese método se hace el ingreso de datos y la presentación de valores, además es el encargado de llamar a los otros métodos siguiendo el orden que se necesita para resolver el problema.

El programa completo se muestra a continuación:

Si desea ejecutar el programa haga clic sobre el botón play ▶ esquina inferior derecha. También puede modificar, compilar y ejecutar su propio código. Finalmente puede abrir el programa en el sitio repl.it haciendo clic en open in.