Introducción a Java — Parte II

Estructuras de Control if y for

Alan Badillo Salas
Full Stack Java
6 min readSep 5, 2018

--

Todo lenguaje de programación debería incorporar una serie de estructuras para guiar el flujo del programa, como las Condicionales, las cuales nos permiten guiar el flujo del programa respecto a una condición o la selección en casos entorno al valor de una variable o los Ciclos los cuales nos permiten retener el flujo del programa repitiendo un bloque de código, ya sea de forma secuencial o basado en una condición. En esta sección veremos el uso de la estructura if y la estructura for, dejando otras estructuras para después.

Estrucutra IF/ELSE IF/ELSE

Una de las estructuras más usadas es la condicional if, la cual se utiliza para determinar si un bloque de código será ejecutado en base a una condición booleana, por ejemplo una comparación entre variables.

La estructura if puede anidar opcionalmente cualquier cantidad de subcondiciones if-else y también de forma opcional una y sóla una sentencia else al final de la misma. En el siguiente ejemplo se muestra una condición que determina si ejecutar una impresión dado el valor de la variable x, luego se muestra la misma estructura adicionando un bloque else, para finalmente mostrar un uso más amplio anidando varias condiciones del estilo if-else.

Observa que se declara una variable de tipo entero llamada x la cual es sometida a diversas condiciones, en caso de que se cumpla alguna condición sobre x se mostrará algún mensaje o no en la terminal. Prueba cambiar el valor de x para predecir que bloque de código se ejecutará.

Cuándo manejamos datos, será importante saber que tipo de dato esta asociado a nuestra variable, ya que si deseamos hacer una comparación entre cadenas no podremos hacerlo como con los números, incluso más adelante veremos como podemos comparar objetos complejos como personas, empleados, etc.

Los operadores básicos de comparación entre números son == que devuelve un booleano true si ambos valores son iguales, != devuelve true si ambos valores son diferentes, > devuelve verdadero si el primer valor es mayor estricto (no incluye que sean iguales) y >= devuelve verdadero si el primer valor es mayor o igual al segundo (por primero se refiere al de lado izquierdo y segundo al del lado derecho de la comparación, estos son operadores binarios). Del mismo modo operan < y <= haciendo la comparación de menor estricto y menor o igual respectivamente. También disponemos de operadores básicos lógicos como la conjunción (que se cumplan dos proposiciones booleanas) mejor conocido como el operador y o ^, que en Java queda definido por &&, así por ejemplo a > b && a < c supondría comparar primero si a es mayor estricto a b y también que se cumpla que a sea menor estricto a c. La disyunción (que se cumpla cualquiera o ambas dos proposiciones booleanas) mejor conocido como el operador o o v, que en Java queda definido por || (doble pipe en inglés), así por ejemplo a <= b || b <= c significa que a sea menor igual a b o que b sea menor o igual a c. Finalmente la negación (que no se cumpla una proposición booleana) mejor conocida como no o ~, que en Java queda definido por ! (signo de exclamación que cierra), así por ejemplo !(a > b) significa que si no se cumple que a es mayor a estricto a b la expresión es verdadera.

Estructura FOR

La estructura for es otra de las más utilizadas y sirve para repetir un ciclo de manera controlada en un proceso llamado iteración. La estructura for viene en dos variantes conocidas como el for-tradicional o sólo for y el for-each o sólo foreach. El ciclo for (for-tradicional) se basa en repetir un bloque de código basado en la inicialización, condición e incremento de una variable de control, dicha variable será conocida como el iterador (la variable iterador), la cual marcará el número de veces que deberá repetirse el ciclo. Por otro lado el ciclo foreach (for-each) se basa en repetir un bloque de código para cada elemento en una colección (o iterable) que puede ser un arreglo, una lista, etc.

En el siguiente ejemplo se muestra un programa usando la estructura for para calcular la suma de los primeros 100 números naturales, incluído el 100.

Observa que se declara la variable s de tipo entero la cual inicialmente es 0, luego se crea un ciclo for con la siguiente estructura inicialización; condición; incremento, lo cuál se refiere a que la estructura recibe tres sentencias, la primera es una sentencia de inicialización del iterador, generalmente int i; donde se declara la variable entera i que servirá de iterador, luego se declara la condición de paro, que finalizará el ciclo en caso de no cumplirse la condición, dicha condición generalmente se efectua sobre el iterador, finalmente se define una tercer sentencia con el incremento, después de que se ejecute el bloque de código se incrementará el iterador para generar una nueva evaluación a la condición, en este caso i++ significa i = i + 1 (a i se le asigna el valor que ya tenía más uno), también es equivalente i += 1. De esta forma el ciclo for puede leerse como: Declara el iterador i iniciado en uno, si i es menor o igual a cien, entonces repite que s sea lo que ya tenía más el valor de i, en cada iteración incrementa a i en uno y vuelve a evaluar la condición antes de repetir el siguiente ciclo, si la condición no se cumple salir del for.

La estructura foreach es un tanto distinta y su funcionalidad se basa en recorrer los elementos de un arreglo o colección (un iterable en general) sin importar el índice del mismo. En el ejemplo de abajo podemos observar la creación literal de un arreglo de números para luego ser iterados e impresos en la terminal.

Observa que se declara numeros de tipo int[], esto significa que contendrá un arreglo de enteros, cuando utilizamos new int[20] le decimos al arreglo que tendrá 20 elementos indexados de 0 a 19, sin embargo, en este caso le estamos diciendo que cree el arreglo de tamaño igual al literal {1, 2, 5, 7, 10, 12}, es decir, creará el arreglo con 6 lugares (índices del 0 al 5) e inicializado en los valores 1, 2, 5, 7, 10 y 12. Podemos acceder a numeros[2] y nos devolvería el valor almacenado en el arreglo en la posición 2, es decir el elemento 5 (recuerda que empieza en el índice 0). Si no queremos usar el acceso mediante índices, podemos recorrer cada elemento mediante la estructura for, con la diferencia que ahora en lugar de enviar inicialización; condición; incremento desiganamos inicialización : iterable, donde inicialización se refiera a la declaración del iterador que va a estar iterando la colección o iterable y el iterable o colección que contiene elementos secuenciales que pueden ser recuperados uno a uno. Finalmente el for estructurado como foreach repite el ciclo para cada elemento iterado.

Aquí concluye la segunda parte de los fundamentos, ahora somos capaces de modificar el flujo del programa para resolver un montón de problemas. Resuelve cada uno de los siguientes problemas y discute en los comentarios tus dudas. Para crear códigos en Java sin instalar nada (la clase se llamará Main por defecto, puedes dejarla así) utiliza la página https://repl.it/

Problema 1. Crear un programa que solicite la edad de una persona e imprima si es mayor de edad el mensaje Ya puedes obtener tu credencial INE. Nota: no olvides imprimir un mensaje que diga Ingresa tu edad: antes de leer la edad.

Problema 2. Crea un programa que calcule un número aletorio entre 0 y 1de tipo float y si es menor o igual a 0.5 imprimir Tendrás suerte hoy y si no imprimir quizás mañana sea tu día de suerte.

Problema 3. Investiga que es el Índice de Masa Corporal (IMC). Crea un programa que solicite la estatura de la persona y su peso. Calcula el Índice de Masa Corpotal y mediante la estructura if/if-else/else determina en qué grado de obesidad se encuentra la persona, imprime mensajes del estilo Tu categoría es Delgado o Tu categoría es Obesidad Tipo I.

Problema 4. Crear un programa que calcule la suma de los números naturales del 125 al 346.

Problema 5. Crea un programa que acumule los números múltiplos de 7 del 1 al 1000 mediante un iterador for y una condición if dentro del ciclo como i % 7 == 0 (investiga el operador módulo o residuo, cuando es cero significa que es un multiplo).

Problema 6. Crea un programa que defina un arreglo de números enteros literal (por ejemplo int[] numeros = new int[] {1, 3, 5, 6, 8, 10, 11, 13, 14}) e iteralos mediante un foreach de tal forma que imprima si el número es par o impar (debe mostrar el número en cuestión). Hint: utiliza el operador módulo y haz n % 2 == 0 para saber si es par.

Problema 7. Investiga como funciona la clase java.util.List y define una lista List<Integer> numeros y llenala con los primeros 100 números naturales al cuadrado. Después Imprime los valores de la lista utilizando un foreach como for (Integer n : numeros). Hint: utiliza un for de 1 hasta100 (inclusive) y guarda en la lista i * i mediante numeros.add(i * i).

--

--

Alan Badillo Salas
Full Stack Java

L. Matemáticas Aplicadas UAM-Cuajimalpa. M. en Inteligencia Artificial IPN-CIDETEC. Desarrollador Full Stack MEAN/MERN. Data Scientist.