Capítulo 5. Conociendo a Bud. Aprendiendo a utilizar los bucles o loops
No paro de pensar en lo rápido que puede cambiarte la vida. Fernando y Rich han tenido bastante suerte, pero yo no he sido tan afortunado. Parece ser que la policía ha encontrado algo en mi ordenador, aunque aún no me han especificado nada. Mi abogado dice que me enfrento a varios años de cárcel, pero ni siquiera sé de qué se me acusa.
Mientras espero mi juicio, mi nuevo hogar es una pequeña celda compartida. La cama es muy incómoda, todo huele fatal y, lo peor de todo, es que no hay intimidad para ir al baño. Va a ser difícil acostumbrarme. En la vida real, tu cabeza está llena de estímulos por todas partes. Se mantiene ocupada, piensas poco y no te aburres. Aquí no hay absolutamente nada para entretenerse. Echo mucho de menos mi teléfono. Apenas puedo comunicarme con mis amigos y familiares, solo con los más cercanos. Me gustaría decirle a todo el mundo que soy inocente y que no he hecho nada malo. No sé qué pensará de mí la gente, pero seguro que nada bueno.

Cuando tienes demasiado tiempo libre, no paras de pensar en cosas. Evidentemente, pienso en lo que ha pasado. No hay que ser muy listo para darse cuenta de que el culpable es Chani. Desapareció misteriosamente pocos días antes de que apareciera la policía. Durante la fiesta, nuestros ordenadores se encontraban dentro de su armario y, por lo tanto, pudo haber accedido a cualquiera de ellos. Además, es muy raro que nadie pueda localizarlo en ningún sitio y que su teléfono esté desconectado.
Me pregunto por qué lo haría. Quiero decir, ¿por qué inculparme a mí o a Rich? Éramos amigos. Siempre lo pasábamos bien y nunca habíamos tenido ningún tipo de problema. Imagino que necesitaba a alguien a quien echarle la culpa y, al final, me ha tocado a mí. Me gustaría saber dónde está y si ha ganado algún dinero con su delito. Quiero entender por qué lo hizo y en qué clase de líos está metido. Soy consciente de que es posible que nunca lo sepa, pero aun así tengo la sensación de que algún día lo sabré.
Es obvio que estoy bastante preocupado, ya que no sé cuánto tiempo tendré que estar aquí. Cada minuto es una tortura y no me gustaría tener que pasar aquí mucho más tiempo. En el fondo, confío en que todo se aclare. No tengo nada que esconder y, además, cuento con el testimonio favorable de Rich. Él podrá ayudarme a demostrar que Chani es el verdadero culpable.

Mi familia ha conseguido un buen abogado, está preparando el caso y pronto me informará de cuál es la estrategia a seguir y a qué condena podría enfrentarme. En general, me siento bastante arropado y eso me permite seguir adelante. Las visitas alegran mis días y rompen la monotonía. Aunque me afecta ver sus rostros de preocupación, me reconforta saber que tengo a gente detrás luchando desde fuera. No me gustaría estar completamente solo. Aquí dentro estoy indefenso y me resulta imposible conseguir pruebas de mi inocencia. Ahora solo me queda confiar en que otras personas me saquen de esta situación.
Ahora que ya sabes que mi estado anímico es bueno, quizás te preguntes cómo es la vida en la cárcel. No me refiero solo a lo que se siente al estar dentro de la celda; eso ya lo he explicado. Estoy hablando de la relación con otros presos, la comida, el patio, la seguridad física…
No voy a mentir. El primer día estaba muy asustado. Desde el momento en que entré en prisión, noté una sensación muy rara dentro de mi cuerpo. Apenas podía respirar. Sentía una fuerte presión en el pecho que no me permitía prácticamente ni hablar. En las películas siempre dicen que hay que pretender ser duro, pero yo no podía aparentarlo. Me limité a caminar mirando al suelo hasta que llegué a mi celda.
Por suerte, esa sensación no duró mucho. Concretamente, se desvaneció cuando conocí a mi compañero de celda, un hombre de Valencia llamado “Bud”. Bueno, creo que es evidente que no es su verdadero nombre. Él se presentó así y yo nunca pregunté nada más.
Bud lleva en la misma celda los últimos 8 años y es muy respetado por todo el mundo allí. Conoce a mucha gente, tanto presos como funcionarios de prisión. Así que ser su amigo puede ofrecerme prácticamente inmunidad total. Mientras no busque pelea, la gente me dejará tranquilo.
Rápidamente, Bud se interesó por mi historia. Quería saber cómo había llegado hasta allí. Le expliqué la situación y se mostró comprensivo. Posteriormente, me informó de que él estaba allí porque trató de robar una joyería. No quiso dar más detalles y nunca me los daría.

Continuamos charlando y acabé comentándole que estaba estudiando ingeniería informática. Me preguntó si sabía programar en Java y le dije que tenía algunas nociones. Entonces, me explicó que, para reducir su condena, ayuda a los funcionarios de prisiones con el software de seguridad. Eso le permite tener un ordenador portátil de vez en cuando.
Pensé que tenía mucha suerte. Mi estancia en la celda sería mucho más amena si pudiera tener un ordenador y acceso a internet. Además de poder contactar con mis familiares y amigos, podría incluso aprender Java. Ser amigo de los carceleros puede tener grandes ventajas.

Creo que Bud me leyó la mente porque, rápidamente, me dijo que podría ayudarme a mejorar mis habilidades programando. Después de hacerme un pequeño test improvisado, pudo calcular más o menos mi nivel. Me preguntó si sabía qué eran los bucles o loops. La verdad es que no tenía ni idea, así que le dije que no.
Así fue como conseguí un profesor particular de Java en la cárcel. Me sentía muy afortunado por ello y no quería defraudar a mi nuevo mentor. Así que me lo tomé muy en serio. La lección de bucles había comenzado y a continuación te voy a contar todo lo que Bud me explicó.
Bucles o Loops
Definición, propósito e importancia de los bucles en la programación
Un bucle, o loop, en programación es una forma de hacer que tu programa pueda ejecutar repetidamente un bloque de código mientras se cumpla una determinada condición. Los bucles son una herramienta fundamental no solo en Java, sino en cualquier lenguaje de programación. Esto se debe a que nos permiten automatizar tareas repetitivas de manera eficiente.
En Java, existen principalmente tres tipos de bucles: for, while, y do-while. Cada uno de estos bucles tiene su propia sintaxis y aplicación específica, pero todos comparten el mismo propósito esencial: ejecutar repetidamente un conjunto de instrucciones.
Te explicaré los tres tipos de bucles, pero te aconsejo céntrate sólo en los dos primeros, for y while. Considero que, si estás dando tus primeros pasos en Java, al principio es fundamental dominar unas cuantas cosas básicas en vez de tratar de abarcar todo. No obstante, es importante que seas consciente de que existen tres. Si realmente te gusta la programación y se vuelve parte de tu vida, en algún momento te toparás con los bucles do-while y no quiero que te pillen por sorpresa.
Introducción a los bucles
Bucle for: Se utiliza cuando se conoce de antemano el número de iteraciones que se deben realizar.
Bucle while: Se emplea cuando no se sabe con certeza cuántas veces se debe repetir un bloque de código y la condición de terminación depende de alguna variable que se evalúa en cada iteración.
Bucle do-while: Similar al while, pero garantiza que el bloque de código se ejecute al menos una vez, ya que la condición se evalúa después de la primera ejecución.
Después de leer esta pequeña definición, lo más seguro es que aún no sepas de qué estamos hablando, aunque ya te vas haciendo una idea. Aun así, no te preocupes porque cuando veamos los ejemplos prácticos, todo te va a quedar claro. No obstante, antes de eso, es necesario enumerar las principales razones de la importancia de los bucles.
- Automatización de Tareas Repetitivas: Los bucles nos permiten que las tareas repetitivas se ejecuten automáticamente; de este modo, no necesitamos escribir el mismo código varias veces. Esto nos va a resultar especialmente útil para operaciones como el procesamiento de elementos de listas, la lectura de archivos, o la generación de secuencias de números.
- Eficiencia y Rendimiento: Si usamos bucles de manera adecuada, podemos mejorar significativamente la eficiencia y el rendimiento de nuestros programas. Evitaremos la redundancia y así, reduciremos la cantidad de código necesario para realizar tareas repetitivas. Esto hará que se optimice el uso de recursos del sistema.
- Facilita el Mantenimiento del Código: El código que utiliza bucles es generalmente más fácil de entender, mantener y modificar. Si se necesita cambiar la lógica de una operación repetitiva, solo se requiere modificar el bloque de código dentro del bucle en lugar de cambiar múltiples instancias del mismo código.
- Manejo de Colecciones y Datos: Los bucles son particularmente útiles para manejar colecciones de datos, como arrays y listas. Permiten recorrer los elementos de estas colecciones y realizar operaciones en cada uno de ellos de manera sistemática.
Bucle for
Un bucle for en Java es una forma de repetir un bloque de código un número específico de veces. Es útil cuando sabemos cuántas veces queremos que se ejecute el código.
Un bucle for tiene tres partes principales:
- Inicialización: Configura una variable para comenzar.
- Condición: Mientras esta condición sea verdadera, el bucle se seguirá ejecutando.
- Actualización: Cambia la variable después de cada repetición del bucle.
Aquí está la estructura básica de un bucle for:
for (inicialización; condición; actualización) {
// Código a repetir
}
Ejemplo 1: Mostrar los números de 1 al 5.
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
Vamos a analizar este ejercicio detenidamente. Lo primero que debemos hacer es declarar una variable. Cómo puedes ver en el ejemplo, le hemos dado el nombre de “i”. Funcionaría igual independientemente del nombre, pero siempre la verás escrita así. Por lo tanto, te recomiendo que tú hagas lo mismo.
Lo segundo que vemos es que la variable i debe ser menor o igual que cinco. Por último, i++ significa que después de cada repetición, i se incrementa en 1.
Si hubiésemos querido hacer una cuenta atrás. Que se mostrasen los números desde 5 hasta 1, lo haríamos de la siguiente forma:
for (int i = 5; i >= 0; i--) {
System.out.println(i);
}
Otra vez comenzamos declarando la variable “i” y, además, le asignamos el valor del primer dato que necesitamos, en este caso, un 5. Después decimos que los valores que queremos mostrar deberán ser iguales o superiores a 0. Por último, utilizamos i- – para que i se vaya reduciendo de uno en uno.
Los bucles no solo sirven para mostrar listados de números. Poco a poco vas a ver que pueden utilizarse para muchas cosas. Vamos a ver otro ejemplo:
Creamos un programa que muestre «Hola» tres veces seguidas:
for (int i = 0; i < 3; i++) {
System.out.println("Hola");
}
Necesitamos un bucle que se repita exactamente tres veces. Perfecto, como sabemos exactamente el número de veces, utilizamos un for. Seguimos la misma estructura que antes; en este caso, decimos que i empieza en 0 y necesitamos que i se repita tres veces, así que:
El primer i será = 0 El segundo i será = 1 El tercer i será = 2
Por lo tanto, necesitamos que la condición sea que i sea menor o igual que 2. Podríamos haberlo hecho de dos formas y daría exactamente igual:
– i < 3
– I <=2
En este caso, nos importa poco que nuestra variable empiece en 0, en 1 o en cualquier otro número, por ejemplo, 33. Simplemente necesitamos que el bucle se repita tres veces. Podría haber sido así:
for (int i = 33; i <=35; i++) {
System.out.println("Hola");
}
Como ya tenemos un bucle que se repite tres veces, simplemente usamos una línea de código para que se imprima cada vez.
La cosa se va a complicar un poco más cuando veamos los ejercicios, pero espero que vayas entendiendo lo básico. El bucle for suele ser bastante sencillo de aprender, ya que simplemente hay que seguir unos pasos concretos. Creas una variable con el primer valor, defines el segundo y después acabas con i++ o i–, dependiendo de cada escenario. El bucle while, en cambio, no es tan estructurado y, aunque en principio puede parecer incluso más sencillo que el for, cuando te enfrentas a ejercicios complejos es cuando te das cuenta de que aplicar el while no es tan intuitivo como pensabas. Aun así, verás cómo enseguida lo aprendes sin problemas.
Bucle While
Un bucle while sigue esta estructura básica:
while (condición) {
// Código a repetir
}
Parece muy sencillo, ¿verdad? Bueno, lo cierto es que lo es. Quizás te metí un poco de miedo antes diciéndote que es más difícil que el bucle for. En realidad, cuando explicamos los ejercicios básicos, todo parece muy simple, pero después, cuando los enunciados se van complicando, es cuando tendrás que darle vueltas a las cosas para hallar la respuesta que buscas. Pero no nos adelantemos, veamos un ejemplo:
Vamos a usar un bucle while para imprimir los números del 1 al 5.
int i = 1; // Inicialización while (i <= 5) {
// Condición
System.out.println(i); i++; // Actualización
}
Creamos y asignamos valor a una variable tipo int fuera de nuestro bucle. De momento, y antes de iniciar el bucle, la variable sigue teniendo un valor de 1. Pero las variables pueden ir cambiando de valor a lo largo que avanza el programa. Recuerda que, al ejecutarse, el programa va leyendo las líneas de código de arriba abajo.
Cuando se ejecuta el bucle por primera vez, i vale uno, y va a mostrar la línea de código System.out.println(i); en este caso “1”.
Pero, ¿qué pasa justo después? Encontramos un i++, así que ahora i vale 2. Como hemos dicho que el bucle no se cierra hasta que i sea igual o mayor que 6, mostrará de nuevo System.out.println(i); y en este caso veremos “2”.
¿Qué pasa en la siguiente iteración? i vale 3… se vuelve a repetir el ciclo. Así hasta llegar a 6, y en ese momento el bucle se cierra y no lo mostrará.
¿Subimos un poco el nivel?
Utilizaré un ejercicio parecido al anterior, ya que así te resultará familiar. En este caso, crearemos un bucle del 1 al 10. Pero vamos a meter un if dentro. Mostraremos un texto que diga: “El valor es mayor que 6”. Necesitamos que se muestre i y luego, al lado, el texto que he mencionado, para i = 7, 8, 9 y 10.
public class Main {
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i<=6) {
System.out.println(i);
} else System.out.println(i + " El valor es mayor que 6"); i++;
}
}
}
Es sencillo. Una vez que teníamos el bucle hecho, necesitábamos que para los 6 primeros números ocurriera una cosa y para los 4 siguientes, otra distinta. Los seis primeros muestran solo el valor de i, mientras que los 4 siguientes muestran i y además el mensaje. Puedes intentar repetir el ejercicio por tu cuenta utilizando un bucle for en vez del while que he utilizado yo. Es incluso más fácil.
Bucles do while
Un bucle do-while es una estructura que repite nuestras instrucciones mientras se cumpla una condición. Lo que lo diferencia de otros bucles es que siempre ejecuta el código al menos una vez, incluso si la condición es falsa desde el principio.
- Primero, el código dentro del bucle se ejecuta.
- Después, se evalúa la condición.
- Si la condición es verdadera, el código se ejecuta nuevamente. Si es falsa, el bucle termina.
Este tipo de bucle es útil cuando queremos asegurarnos de que el bloque de código se ejecute al menos una vez, sin importar la condición. Aquí tienes un ejemplo:
int numero = 1;
do {
System.out.println(numero); // Imprime el número actual
numero++; // Incrementa el número en 1
} while (numero <= 5); // Repite mientras el número sea menor o igual a 5
- Primero, imprime el número 1.
- Luego verifica la condición numero <= 5. Como sigue siendo verdadera, el bucle continúa.
- El proceso se repite hasta que el número llega a 6, momento en el que la condición se vuelve falsa y el bucle termina.
Concepto de Break
Cuando el programa encuentra un break, sale del bucle y continúa con la siguiente línea de código ya fuera del bucle. La utilización del break es importante sobre todo por dos motivos.
- El primero es que nos permite salir de un break prematuramente. Algo que verás que va a ser necesario hacer en muchas situaciones. Sin ir más lejos, en varios de los ejercicios del final del tema.
- El segundo es que mejora la eficiencia del programa ahorrando recursos. Si sabes que ya has encontrado lo que buscabas, no hay necesidad de recorrer el bucle hasta el final.
Además, el break nos va a ayudar a simplificar la lógica del programa; hace el código más limpio, sencillo y fácil de entender. Por último, va a ser una solución elegante para el manejo de casos excepcionales. En algunos casos, dentro de un bucle puedes encontrar situaciones excepcionales como errores o condiciones inválidas que requieren cerrar el bucle de inmediato. No encontrarás nada más sencillo ni rápido que un break.
Ejemplo de uso de break
Imagina que creas un bucle infinito utilizando un bucle while. Podríamos hacerlo de la siguiente forma:
int a = 1;
while (a >= 0) { a++;
if (a > 10) {
System.out.println(a);
}
}
Según ese bucle, mientras a sea mayor que 0, se va a seguir repitiendo. Nuestro programa estaría infinitamente mostrando número tras número de uno en uno en nuestra pantalla. Ahora bien, queremos que muestre solamente el número posterior a 10 y que después el bucle se cierre.
int a = 1;
while (a >= 0) { a++;
if (a > 10) {
System.out.println("Primer número mayor que 10 es = " + break;
// Sale del bucle cuando se encuentra el primer número mayor que 10
}
}
A estas alturas ya te habrás dado cuenta de que este ejercicio se podría haber hecho de otra forma. No sólo eso, sino que se puede hacer de muchas formas distintas. El código es sólo una herramienta que tiene el programador para resolver problemas. Está a nuestra disposición y se puede utilizar como mejor nos convenga en cada situación.
Concepto de continue
Un continue se utiliza para saltar a la siguiente iteración del bucle, omitiendo el código entre medio dentro del bucle para la iteración actual. Cuando nuestro programa encuentra una instrucción continue, el bucle no se detiene, sino que salta hasta la próxima iteración. Esto es útil cuando deseas omitir ciertas iteraciones bajo condiciones específicas sin detener el bucle por completo.
Ejemplo de continue
Imagina que tienes un bucle que cuenta del 1 al 10, pero quieres omitir el número 5. Puedes usar continue para lograr esto.
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // Omite el resto del bucle cuando i es igual a 5
}
System.out.println(i);
}
}
}
Ambos conceptos, break y continue, son herramientas útiles para controlar el flujo de ejecución dentro de los bucles en Java, permitiéndote manipular la iteración de acuerdo con tus necesidades específicas.
Manipulación de Cadenas
Aunque la manipulación de cadenas podría perfectamente tener un tema propio, para no alargar la cosa en exceso he decidido mostrarte cómo funciona este concepto en este tema. Además, a partir de ahora vas a ver en los ejercicios dos métodos en concreto y, para que no te pillen por sorpresa, voy a explicarte qué son y para qué se utilizan. Esto va a enriquecer notablemente tu conocimiento de la sintaxis.
Métodos charAt() y length()
– El método charAt()
El método charAt() en Java se utiliza para obtener el carácter en una posición específica dentro de una cadena de texto. Toma un índice como argumento y devuelve el carácter en esa posición dentro de la cadena.
Sintaxis:
char charAt(int indice)
indice: Es el índice del carácter que se desea obtener. El primer carácter de la cadena tiene un índice de 0, el segundo tiene un índice de 1, y así sucesivamente.
Ejemplo:
String texto = "Hola Mundo"; char caracter = texto.charAt(0);
System.out.println("El carácter en la posición 0 es: " + caracter); // Output: 'H'
En este caso, charAt(0) devuelve el primer carácter de la cadena «Hola Mundo», que es ‘H’. Si usas otro índice, obtendrás el carácter en esa posición, como por ejemplo charAt(5) te devolvería ‘M’.
– El método length()
El método length() en Java se utiliza para saber cuántos caracteres tiene una cadena de texto. Devuelve un número entero que representa la longitud de la cadena.
Sintaxis:
int length()
Ejemplo:
String saludo = "Hola";
int longitud = saludo.length();
System.out.println("La longitud de la cadena es: " + longitud); // Output: 4
No tiene mayor complicación; en los siguientes ejercicios vas a encontrarte estos métodos unas cuantas veces. En cuanto empieces a trabajar con ellos, verás que son muy sencillos de utilizar.
Resumen de lo aprendido
Un bucle permite que un bloque de código se ejecute repetidamente mientras que se cumpla una condición específica. Esta técnica es esencial para automatizar tareas repetitivas de manera eficiente. En Java, los principales tipos de bucles son for, while y do-while, cada uno con una estructura y uso particular.
El bucle for se utiliza cuando se conoce de antemano el número de veces que se debe ejecutar el código. En cambio, el bucle while se emplea cuando no se sabe cuántas veces se repetirá el bloque de código, ya que la condición de terminación depende de una variable evaluada en cada iteración. Por su parte, el bucle do-while es similar al while, pero garantiza que el bloque de código se ejecute al menos una vez, evaluando la condición después de la primera ejecución.
Los bucles son necesarios por varias razones:
- En primer lugar, automatizan tareas repetitivas, permitiendo que el código se ejecute varias veces sin necesidad de escribirlo repetidamente.
- En segundo lugar, mejoran la eficiencia y el rendimiento al reducir la redundancia y optimizar el uso de recursos. Además, facilitan el mantenimiento del código, ya que es más sencillo modificar un bloque de código dentro de un bucle que múltiples instancias del mismo código.
- Por último, son especialmente útiles para manejar colecciones de datos, como arrays y listas, permitiendo realizar operaciones sistemáticas en cada elemento.
Además, en este tema hemos visto dos comandos muy útiles para cuando trabajamos con condicionales.
- El concepto de «break» se utiliza para salir de un bucle antes de completar todas las iteraciones. Esto resulta útil para mejorar la eficiencia del programa y simplificar la lógica del código, haciéndolo más limpio y fácil de entender.
- Por otro lado, «continue» se utiliza para saltar a la siguiente iteración del bucle, omitiendo el código intermedio para la iteración actual. Ambos conceptos son herramientas valiosas para controlar el flujo de ejecución dentro de los bucles en Java y manipular la iteración según las necesidades específicas del programa.