Para empezar a practicar la programación en Java nada mejor que un ejercicio típico: "Dadas 5 variables con valores fijos calcular el mayor y el menor".


Ante este enunciado y teniendo en cuenta que solo podemos usar declaración de variables y sentencias "If", vamos a ver como lo resolvemos:

Pués lo dicho... tenemos 5 variables, declaradas en Java:

int a = 10;
int b = 12;
int c = 3;
int d = 23;
int e = 14;

La técnica para encontrar el mínimo y el máximo de forma eficiente, recorriendo solo una vez la lista de variables, es declarar una variable min y otra max y comprobar, una a una, si hay un elemento menor o mayor respectivamente.

Vamos a ver el código que se explica mejor que yo:

public class MinMax {
   public static void main(String[] args) {
      int a = 10;
      int b = 12;
      int c = 3;
      int d = 23;
      int e = 14;

        int min = a;
        int max = a;

        if (b < min) {
          min = b;
        } else if (b > max) {
          max = b;
        }

        if (c < min) {
          min = c;
        } else if (c > max) {
            max = c;
        }

        if (d < min) { 
          min = d;
        } else if (d > max) {
          max = d;
        }
        if (e < min) {
          min = e;
        } else if (e > max) {
          max = e;
        }

        System.out.println("Min: " + min);
        System.out.println("Max: " + max);

    }  
}

Que código más feo nos ha quedado... pero funciona.

Imaginad que en vez de 5 son 500 variables donde buscar el máximo y el mínimo. Si lo de arriba es feo, con 500 variables ¡tendremos un churro digno de un "horror code" en toda regla! Así que para evitar volver a escribir código que duela a la vista, vamos a introducir dos conceptos nuevos de Java: los arrays y el bucle for.

Por ahora vamos a considerar que un array es una variable que contiene una lista de valores. Por tanto, las variables que hemos visto antes se declararía así:

int[] valores = new int[5]; // Esto es una lista de 5 elementos
valores[0] = 10;  // Y aqui vamos introduciendo
valores[1] = 12;  // los elementos de la lista
valores[2] = 3;   //
valores[3] = 23;  // El numero de dentro del corchete
valores[4] = 14;  // es el indice del array

El bucle for es una sentencia que nos permite ejecutar una serie de instrucciones un número determinado de veces, es decir, le decimos al compilador "aquí me haces esto y esto otro, las veces que yo te diga".

"for (declaro contador; condición de parada; actualización del contador) { }"

Por ejemplo, si queremos recorrer el array declarado anteriormente, e imprimir sus valores, lo haríamos con este código simple:

public class MinMax {
    public static void main(String[] args) {
        int[] valores = new int[5]; // Esto es una lista de 5 elementos
        valores[0] = 10;            // Y aqui vamos introduciendo   
        valores[1] = 12;            // los elementos de la lista 
        valores[2] = 3;             //   
        valores[3] = 23;            // El numero de dentro del corchete 
        valores[4] = 14;            // es el indice del array  

        for (int i = 0; i < 5; i++) {    
           System.out.println( valores[i] );    
        }
    }
}

Pero ahora que recuerdo, lo que nos han pedido, es un algoritmo que nos calcule el valor mínimo y el máximo del array.

public class MinMax {
   public static void main(String[] args) {
      int[] valores = new int[5]; // Esto es una lista de 5 elementos
      valores[0] = 10;            // Y aqui vamos introduciendo
      valores[1] = 12;            // los elementos de la lista
      valores[2] = 3;             // 
      valores[3] = 23;            // El numero de dentro del corchete
      valores[4] = 14;            // es el indice del array

      int min = valores[0];
      int max = valores[0];  

      for (int i = 1; i < 5; i++) {  
          if (valores[i] < min) {  
              min = valores[i]; 
          } else if (valores[i] > max) {
              max = valores[i]; 
          }
      }

      System.out.println("Min: " + min);
      System.out.println("Max: " + max); 
   }
}

Insisto: Imaginad que en vez de 5 son 500 elementos. Me niego rotundamente a escribir un array tan grande a mano, así que vamos a usar un bucle for para generar un array bien grandote. Para que tenga algo de chicha vamos a introducir la clase Random (no sabemos que es una clase pero, de por ahora, nos da igual), esta sirve para obtener número aleatorios entre un rango determinado.

import java.util.Random; // Le decimos a java que vamos a usar la funcion Random

public class MinMax {
   public static void main(String[] args) {
      int[] valores = new int[500]; // Esto es una lista de 500 elementos
      Random randomGenerator = new Random(); // Declaramos una variable Random

      for (int i = 0; i < 500; i++) {
         valores[i] = randomGenerator.nextInt(1000); // Aleatorio entre 0 y 1000
      }
      int min = valores[0];
      int max = valores[0];

      for (int i = 1; i < 500; i++) {
         if (valores[i] < min) {
            min = valores[i];
         } else if (valores[i] > max) {
            max = valores[i];
         }      }
      System.out.println("Min: " + min);
      System.out.println("Max: " + max);
    }
 }

y... ¡oiga! hasta parece que funciona... :)