Autor: Luis Fernando Apáez Álvarez
-Curso PyM-
Clase 1: Primeros pasos
Fecha: 04 de diciembre del 2022
If, else if y switch
Conversión de tipos
Bucle for
Bucle while
En la clase pasada vimos cómo implementar condicionales en java.
Asimismo, podemos utilizar también la idea del elif de python pero implementarlo ahora en java escribiendo en su lugar else if:
x
// Definimos una clase nuevapublic class sentencias_control { // Metodo principal public static void main(String[] args) { // if-else var condicion = true; if (condicion) { System.out.println("Condicion verdadera"); } else { System.out.println("Condicion false"); } // elif var numero = 3; var numeroTexto = "Desconocido"; if (numero == 1) { numeroTexto = "uno"; System.out.println("El número es: " + numeroTexto); } else if(numero == 2){ numeroTexto = "dos"; System.out.println("El número es: " + numeroTexto); } else if(numero == 3){ numeroTexto = "tres"; System.out.println("El número es: " + numeroTexto); } else{ System.out.println(numeroTexto); } // Estructura Switch // Convertiremos un número a texto var num = 2; var numTexto = "Desconocido"; switch (num) { case 1: numTexto = "uno"; break; case 2: numTexto = "dos"; break; default: numTexto = "Número desconocido"; } System.out.println(numTexto); }}xxxxxxxxxxCondicion verdaderaEl número es: tresdos
Del código anterior la estructura de control nueva es la referente a la switch. Este tipo de estructura nos sirve para evaluar casos y es una alternativa, en ese sentido, para la utilización muchos condicionales if y/o elif. Vemos en el ejemplo anterior se ha definido una variable num , la cual es colocada inmediatamente después de la sentencia switch, de modo que el valor de dicha variable será comparado con los distintos valores que colocamos en las sentencias de case. Notamos además que después de colocar las instrucciones para cada caso debemos colocar al final la instrucción break para finalizar cada caso. Finalmente, podemos colocar opcionalmente instrucciones para un caso por default.
Recordemos que en python escribíamos input() para solicitar información al usuario. De manera análoga podemos solicitar información al usuario en java como sigue:
xxxxxxxxxx// Importamos el paquete que utilizaremos para el escanerimport java.util.Scanner;
public class scanner_I { public static void main(String args[]) { // instanciamos un objeto de tipo scanner Scanner consola = new Scanner(System.in);
System.out.println("Escribe tu nombre:"); // declaramos la variable usuario que guardara // lo que se ingrese var usuario = consola.nextLine();
// imprimimos System.out.println("usuario = " + usuario);
// Otro ejemplo System.out.println("Escribe el titulo: "); var titulo = consola.nextLine(); System.out.println("Titulo = " + titulo); }}xxxxxxxxxxEscribe tu nombre:Luisusuario = LuisEscribe el titulo::oTitulo = :o
En python podíamos convertir de un número entero a uno flotante mediante la función float, o de un flotante a un entero mediante la función int(); asimismo, podíamos convertir números a cadenas de texto mediante str(). De manera análoga podemos hacer conversión de tipos en java:
x
// importacion necesaria para pedir informacion al usuarioimport java.util.Scanner;
public class conversiones { public static void main(String args[]) { // De string a int utilizando el metodo parseInt var edad = Integer.parseInt("25"); System.out.println(edad);
// Utilizaremos ahora la clase Double var valorPi = Double.parseDouble("3.1416"); System.out.println(valorPi);
// Pedir un valor con la consola var consola = new Scanner(System.in); System.out.println("Cual es tu edad?");
/*Debemos realizar la conversion porque ya hemos * declarado que la variable edad es un entero * y como lo que se ingresa a consola se * considera como un string, para evitar * errores realizamos nuevamente la conversion */
edad = Integer.parseInt(consola.nextLine()); System.out.println("Tu edad es: " + edad);
// De int a string var edadTexto = String.valueOf(10); System.out.println(edadTexto);
// Recuperar un caracter de una cadena: salida "h" var caracter = "holis".charAt(0); System.out.println(caracter); }}xxxxxxxxxx253.1416Cual es tu edad?16Tu edad es: 1610h
donde, para Integer.parseInt("25") de la clase Integer estamos utilizando el método parseInt() para realizar la conversión de la cadena de texto a un número entero. Análogamente para Double.parseDouble(). Luego, para convertir número a cadenas de texto utilizamos String.valueOf().
x
public class ciclo_for { public static void main(String[] args) { // Ciclo for: // Imprimir cada letra de una cadena
var cadena= "hola"; // obtenemos la longitud de la cadena int longitud = cadena.length(); // Contador-condicion-aumento for (int i = 0; i <= longitud - 1; i++) { var caracter = cadena.charAt(i); System.out.println(caracter); } } }
xxxxxxxxxxhola
donde colocamos para el for int i=0 que indica el primer valor que tomará la variable i del bucle, despues i>=longitud que indica que el último valor que tomará la i será el almacenado en la variable longitud-1, y finalmente colocamos el tipo de autoincremento que tendrá la variable i, en este caso colocamos un postincremento. De tal manera, el rango del bucle for sería i=0,1,2,3. Tenemos adicionalmente que la estructura básica del for es:
xxxxxxxxxxfor (<variable del bucle y valor inicial>, <valor final>, <autoincremento>) {<instrucciones a ejecutar>}
Más adelante abordaremos listas y arreglos en java, pero por el momento ocuparemos una lista para ver el siguiente ejemplo:
xxxxxxxxxximport java.util.ArrayList;import java.util.List;
public class ciclos_II { public static void main(String[] args) { // Uso de break // Declaramos una lista List<Integer> numeros = new ArrayList<Integer>(); // Agregamos elementos a la lista anterior numeros.add(7); numeros.add(15); numeros.add(22); numeros.add(14); numeros.add(1); numeros.add(2); System.out.println(numeros); /* Haremos un bucle for para detenernos * cuando, al recorrer la lista, encontremos * un numero par */ for (int i : numeros) { if (i % 2 == 0) { System.out.println("Primer numero par: " + i); // break rompe o detiene el bucle break; } } // Continue: ir a la siguiente iteracion // Imprimiremos solo los numeros pares for (var i : numeros) { if (i % 2 != 0) { continue; } else { System.out.println(i); } } }}
xxxxxxxxxx[7, 15, 22, 14, 1, 2]Primer numero par: 2222142
donde con el código List<Integer> numeros = new ArrayList<Integer>() creamos la lista vacía numeros configurando que dicha lista almacenará enteros List<Integer>.
Notamos que ahora el bucle for está iterando sobre los elementos de una lista. En python para ello escribíamos for i in <nombre_lista>, pero en java será como for (int i): numeros, donde colocamos int i porque la i recorrerá los elementos de la lista numeros, la cual almacena número enteros. De manera alternativa a lo anterior podemos colocar var i para que se efectúe la inferencia de tipos.
x
public class ciclos { public static void main(String[] args) { // While // Numeros menores que 5 var num = 5; var contador = 0; while(contador < num){ System.out.println(contador); contador++; } System.out.println("**********"); // do while var contador2 = 0; do { // Codigo a repetir System.out.println(contador2); contador2++; } while (contador2 < num); System.out.println("**********"); /*Lo anterior nos da el mismo resultado al ciclo while * anterior. Pero la diferencia esta en el siguiente * ejemplo: */
var contador3 = 0; do { // Codigo a repetir System.out.println(contador3); contador3++; } while (contador3 < 0); }}
x01234**********01234**********0
donde la estructura básica del do-while es
x
do { <instrucciones a repetir> } while (<condicion de repeticion>);Además, la diferencia entre el bucle while normal al bucle do-while es que el do-while siempre se ejecutará al menos una vez, a pesar de que desde el inicio la condición del while sea falsa. Caso contrario, el bucle while puede que no se ejecute ni una sola vez.