Ciclo do-while en C++. Estructura, sintaxis y diferencias con el while. Cómo y cuándo usar un ciclo do-while en C++

Los ciclos do-while son una estructura de control cíclica, que nos permiten ejecutar una o varias líneas de código de forma repetitiva sin necesidad de tener un valor inicial e incluso a veces sin siquiera conocer cuándo se va a dar el valor final. Hasta ahí son similares a los ciclos while, sin embargo, el ciclo do-while nos permite añadir cierta ventaja adicional puesto que nos permite ejecutar primero el bloque de instrucciones antes de evaluar la condición necesaria. De este modo, los ciclos do-while, son más efectivos para algunas situaciones específicas. En resumen, un ciclo do-while, es una estructura de control cíclica que permite ejecutar de manera repetitiva un bloque de instrucciones sin evaluar de forma inmediata una condición especifica, sino evaluándola justo después de ejecutar por primera vez el bloque de instrucciones en su interior. Por lo tanto, un ciclo do-while ejecutará las instrucciones que contiene al menos una vez, mientras que el while podría no hacerlo ni una vez.

¿Cómo funciona un Ciclo Do-While?

Para comprender mejor el funcionamiento del ciclo while, usemos de nuevo el ejemplo de la sección anterior sobre el ciclo while. Imaginemos entonces que por algún motivo, queremos pedirle a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un número mayor a 500. Como vimos anteriormente, esto se puede hacer por medio de un ciclo while, pero vamos ahora a ver como lo podemos hacer usando un ciclo do-while mejorando así un poco nuestro algoritmo, evitando ciertas líneas, tal como se dijo con el ciclo while. De hecho, aquí estamos en la situación de no tener ni idea de cuándo al usuario se le va a ocurrir ingresar un número mayor que 500, pues es algo indeterminado para nosotros, sin embargo, el ciclo while y en efecto el do-while nos permite ejecutar cierta acción de forma "infinita" hasta que se cumpla alguna condición específica, en nuestro caso, sería que el número ingresado sea mayor a 500. De modo que, si el usuario nos ingresa de manera sucesiva los siguientes numeros, 1,50,99, 49, 21, 30, 500 ..., nuestro programa no finalizará, pues ninguno de estos números es mayor que 500, sin embargo si nos ingresara el número 800, el programa finalizaría inmediatamente.

De nuevo, en el caso del do-while las instrucciones se ejcutan al menos una vez, lo cual nos permitíría solicitar el número al usuario dentro del ciclo, evitando repetir la asignación de la variable. Nuestro código queda más organizado así.

Vamos a ver ahora cómo es la sintaxis de un ciclo do-while en Java, así estaremos listos para usarlos en nuestros programas de ahora en adelante cada vez que lo necesitemos

Sintaxis del Ciclo Do-While en Java:

La sintaxis de un ciclo do-while es un tanto más larga que la del ciclo while en Java, sin embargo no se hace más complicado, de hecho con tan solo tener bien clara una condición de finalización para el ciclo tendremos prácticamente todo terminado.

do { .... .... Bloque de Instrucciones.... .... .... } while(condición de finalización); //por ejemplo numero != 23

Vamos entonces a ver línea por línea el anterior código para comprender todo y quedar claros. Posteriormente veremos el ejemplo planteado anteriormente y su solución.

Línea 1:

Esta línea es por decirlo así, la parte novedosa del ciclo do-while, esta expresión no evalúa ninguna condición ni nada, simplemente da paso directo al bloque de instrucción y luego permite la evaluación de la condición.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo, si no la ponemos solo se ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior a la instrucción do, de modo que si deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves. En lo personal, es preferible poner siempre las llaves sin importar cuantas líneas se vayan a ejecutar, es una buena práctica de programación y te puede evitar dolores de cabeza

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya debemos saber esta nos indica que allí termina el bloque de instrucciones que se ejecutarán de manera cíclica y se dará por terminada la ejecución de este para continuar ejecutando el resto del algoritmo.

Línea 9:

La línea 9 en el ciclo do-while, tiene la misma importancia y función que l alinea 1 en la sección del ciclo while, cabe resaltar que simplemente evalúa la condición y define si se cumple o no para seguir con la ejecución del ciclo o con la del resto del algoritmo, de este modo podemos ver que el ciclo while y el do-while son muy similares, con la pequeña diferencia en que en uno se evalúa la condición desde el principio y en la otra al final de cada ciclo.

No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un par de ejemplos que veremos a continuación, te va a quedar todo claro

Ejemplos de Ciclo Do-While en Java

A continuación vamos a ver unos cuantos ejemplos para comprender de manera adecuada el uso de los ciclos while en Java, recuerda que si no comprendes alguno de estos ejemplos o tienes alguna pregunta o sugerencia sobre estos o cualquier contenido de la sección, puedes dejarlas en la sección de comentarios.

Ejemplo 1: Pedir números por pantalla hasta que alguno sea mayor a 500

Vamos a retomar el ejemplo anterior, donde queremos hacer que nuestro programa le pida a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un número mayor a 500, una vez más es un ejemplo sencillo con el que nos aseguraremos de haber comprendido bien todos los conceptos anteriores, vamos a ver cómo hacer lo mismo con dos tipos de ciclos diferentes (el while y el do-while), sin embargo vamos a ver como con uno es más directo que con el otro, mejorando la calidad de nuestro código:

Solución Ejemplo 1:

Para solucionar esto, debemos tener clara cuál va a ser la condición que se debe cumplir para que el ciclo este pidiendo el numero constantemente. El ciclo se va a detener solo cuando el numero ingresado sea mayor que 500, así que la condición para que se siga ejecutando es que el numero sea menor a 500. Si para que se detenga, el numero debe ser mayor a 500, entonces para seguirse ejecutando el numero debe ser menor o igual a 500, veámoslo entonces

Scanner sc = new Scanner(System.in); int numero; do { System.out.println("Ingrese un numero: "); numero = sc.nextInt(); } while(numero <= 500);

El código funcional completo y un tanto más amigable para el usuario sería el siguiente:

import java.util.Scanner; public class CicloDoWhile { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int numero; do { System.out.println("Ingrese un numero: "); numero = sc.nextInt(); } while(numero <= 500); } }

Nota: Como podrás comprobar, comparando con el artículo anterior, ambos códigos hacen lo mismo, ya sea el del ciclo while o del ciclo do while. Sin embargo con el ciclo do-while, hemos obtenido un beneficio interesante, primero que todo hemos podido evitar tener que inicializar la variable "numero", segundo también pudimos eliminar las líneas repetidas donde se pedía el numero por fuera del ciclo y luego al interior del ciclo, aquí lo hicimos solo al interior, pues la condición se evaluaba mucho más abajo.

Nota 2: Si no comprendes alguna de las líneas de estos códigos, te recomiendo visitar los contenidos anteriores (Entrada de Datos, Salida de Datos, Librerías, Comentarios y Estructura de un Programa) o también puedes dejar un comentario al final de la sección con tu pregunta.

Diferencias entre el ciclo do-while en Java y el ciclo while

Cuando vemos por primera vez el ciclo do-while, se nos viene de inmediato la pregunta de cuál es la diferencia entre un do-while y un while. Y no quedamos muy seguros de poder saber cuándo usar uno u otro, así que aquí te explico.

La diferencia es que el do-while, primero ejecuta la acción y luego evalúa la condición, mientras que el while evalúa la condición antes que cualquier cosa. Esto quiere decir, que el ciclo while podría no ejecutar ni siquiera una vez lo que tenga en su interior, mientras que el do-while te asegura que lo que pongas dentro se ejecute mínimo una vez, pues primero ejecuta y luego evalúa la condición.

Ejemplo de diferencias entre un do-while en Java y un while

Como siempre, un ejemplo puede ayudarnos mucho más a comprender cuándo usar un do-while en lugar de un while en Java, así que vamos a implementar el siguiente ejemplo:

Vamos a suponer que queremos mostrar un menú de opciones a un usuario de nuestro programa y que mientras la opción ingresada no sea cero, entonces no finalizamos el programa.

Implementando el ejemplo del menú de opciones con un ciclo do-while (el recomendado)

import java.util.Scanner; public class CicloDoWhile { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int opcion = 0; do { System.out.println("Ingrese 1 para mostrar mensaje"); System.out.println("Ingrese 2 para hacer algo más"); System.out.println("Ingrese 0 para salir"); System.out.println("Ingrese una opción a ejecutar"); opcion = sc.nextInt(); } while(opcion <= 500); } }

Como puedes ver y comprobar, es un código sencillo y mientras que el usuario del programa no ingrese cero en la consola, el programa seguirá mostrando las diferentes opciones.

Es importante notar que, incluso aunque la variable "opcion" se inició en cero, el ciclo do-while mostró las opciones sin problemas y no llegó a evaluar su valor, sino únicamente después de que el usuario la ingresó. Veamos ahora el mismo ejercicio, pero usando un ciclo while.

Implementando el ejemplo del menú de opciones con un ciclo while (no recomendado)

import java.util.Scanner; public class CicloDoWhile { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int opcion = -1; //Mostramos el menú hasta que la opción sea cero while(opcion != 0) { System.out.println("Ingrese 1 para mostrar mensaje"); System.out.println("Ingrese 2 para hacer algo más"); System.out.println("Ingrese 0 para salir"); System.out.println("Ingrese una opción a ejecutar"); opcion = sc.nextInt(); } } }

En este caso, vemos que, por supuesto, con el ciclo while también podemos conseguir lo mismo, PERO modificando algunas cosas con relación a la opción. En general, el mayor aspecto negativo de usar un while en este caso, en lugar de un do-while, es que ya hemos asignado la variable opción sin siquiera habérsela solicitado al usuario por primera vez, lo cual nos obliga a darle un valor inicial a la variable "opcion" (un -1), para asegurarnos de que el ciclo se ejecute al menos una vez y el usuario tenga la opción de ver el menú e ingresar la acción que desea ejecutar.

Muy bien, con eso deberíamos tener un caso claro en el que es mejor usar un do-while que un while en Java. Veamos ahora algunas conclusiones.

Conclusiones sobre el ciclo do-while en Java

En efecto, los ciclos do-while son bastante útiles. Sin embargo, como con cualquier ciclo desde el punto de vista de la eficiencia al igual que con los ciclos for, es recomendable evitarlos en la medida de lo posible, siempre que vayas a usar un ciclo do-while o cualquier tipo de ciclo en realidad, deberías preguntarte primero si es totalmente necesario o si existe una manera más efectiva de hacerlo. Evidentemente habrá situaciones en las que será casi que imprescindible usar el ciclo, pues por algo existen. Está entonces en nuestra habilidad determinar cuándo usarlos y mejor aún cómo usarlos de manera efectiva.

Finalmente, tener claro, tal como se mostró en este artículo, cuándo usar un do-while en lugar de cualquier otro ciclo de Java.

Muy bien, de momento, es todo en esta sección, podemos entonces continuar ahora con el siguiente contenido. Recuerda también dejar tus comentarios y/o preguntas en la sección de comentarios.

La última actualización de este artículo fue hace 3 años

Foto de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

...

Si te parece bien, te enviaré de vez en cuando, mensajes de interés sobre los temas que se tratan en el sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encuentres.

Por supuesto, puedes cancelar tu suscripción en cualquier momento.