Ejercicio 8. Cronómetro

Hacer un programa que muestre un cronometro, indicando las horas, minutos y segundos.

Con este ejercicio vamos a practicar la utilización de varios bucles anidados. Para la realización de un cronómetro debemos tener en cuenta las horas, minutos y segundos.

Debemos empezar desde el valor 00:00:00 y de ahí, ha de ir avanzando, primero los segundos hasta llegar a 59, una vez ahí, debe volver a 00 y en minutos, aparecer 1, etc.

Si lo queremos hacer con esta visualización:

00:00:00

Tenemos un problema, si hay que pasar de 00:00:00 a 00:00:01, ¿cómo hacerlo?

Podemos imprimirlo en líneas diferentes, que con los conocimientos que tenemos hasta ahora, es como yo lo hubiese hecho en un principio, pero si lo queremos dejar más bonito, podemos utilizar las opciones que Rafa del Castillo nos indicó durante la clase que realizamos de corrección.

Para ello, lo que vamos a hacer, es, cada vez que actualizamos el valor, borramos lo que tenemos en pantalla y volvemos a imprimir el nuevo resultado de nuestro programa. Esto lo realizamos con el comando \b que se utiliza igual que cuando queremos añadir un salto de línea \n, etc.

Para utilizarlo de una forma más intuitiva, lo que vamos a crear, es un String borraAnterior que incluirá \b\b\b\b\b\b\b\b, que equivalen a los seis dígitos y los dos puntos dobles puntos.

Crear pausa en el programa

En segundo lugar, tenemos que tener en cuenta, que el programa debe crear una pausa de un segundo antes de cada actualización, esto lo tenemos que hacer mediante una de las dos opciones siguientes:

TimeUnit.SECONDS.sleep(1);
Thread.sleep(1*1000);

Cualquiera de estas opciones, creará una pausa de un segundo en el programa, lo que hará que la actualización entre un ciclo y otro lleve esta pausa, creando así el cronómetro.

Creamos los bucles anidados

Como comentábamos anteriormente, para la realización de este ejercicio, debemos realizar tres bucles anidados, ¿qué condiciones hacemos?

Bucle inicial (el de dentro del todo, segundos)

En este bucle vamos a realizar la función principal de este programa, se encargará de recorrer todos los segundos y de imprimir en pantalla el resultado. Sus condiciones deben ser las siguientes:

  • contador (segundos) debe empezar a 0.
  • condición segundos < 60
  • incremento segundos++

En su interior el funcionamiento debe ser:

  • Impresión en pantalla de los valores horas, minutos, segundos.
    Esta impresión la haremos mediante un System.out.printf para darle el formato deseado: %02d:%02d:%02d
  • Creamos la pausa del programa: TimeUnit.SECONDS.sleep(1);
  • Borramos la impresión para que a continuación vuelva a realizarse otro ciclo: borraAnterior
Bucle intermedio (minutos)

En este bucle iremos aumentando el valor de los minutos y debe incluir en su interior el bucle inicial.

  • contador (minutos) debe empezar a 0.
  • condición minutos < 60
  • incremento minutos++
Bucle exterior (horas)

En este bucle aumentaremos el valor de horas y debe incluir el bucle intermedio.

  • contador (horas) debe empezar a 0.
  • condición, si queremos que sea un cronómetro indefinido, podemos dejarlo en blanco (crearía un bucle infinito), o bien podemos ponerle un límite, por ejemplo, a un día, 24 horas. horas < 24
  • incremento horas++
package estructurasRepetitivas;

/**
Programa:
Hacer un programa que muestre un cronometro, indicando las horas, minutos y segundos.

@author: manolohidalgo_
@date: 11-11-19
*/

import java.util.concurrent.TimeUnit;

public class Ej08CronometroV2 {
  public static void main(String args[]) throws InterruptedException {
    int hora;
    int minuto;
    int segundo;
    String borraAnterior = "\b\b\b\b\b\b\b\b"; 

    // horas
    for (hora=0; hora<=23; hora++) {
      // minutos
      for (minuto=0; minuto<=59; minuto++) {
        // segundos
        for (segundo=0; segundo<=59; segundo++) {
          // escribe hora:minutos:segundos (actualizandose a medida que va pasando cada segundo)
          System.out.printf("%02d:%02d:%02d",hora,minuto,segundo);
          TimeUnit.SECONDS.sleep(1);
          System.out.print(borraAnterior);
        }
      }
    }
  }


}

Puedes acceder a este ejercicio en GitHub en este enlace.

Espero que estos ejercicios de repaso de JAVA realizados durante el curso 2019/2020 en la clase de programación del I.E.S. Gran Capitán (Córdoba) puedan servirte si estás empezando, si tienes alguna duda al respecto, alguna sugerencia o algo que no te haya quedado claro, no tienes más que escribirme en los comentarios, estoy aquí para ayudarte y aprender, ¡Nos leemos!