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 nueva
public 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);
}
}
xxxxxxxxxx
Condicion verdadera
El número es: tres
dos
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 escaner
import 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);
}
}
xxxxxxxxxx
Escribe tu nombre:
Luis
usuario = Luis
Escribe el titulo:
:o
Titulo = :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 usuario
import 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);
}
}
xxxxxxxxxx
25
3.1416
Cual es tu edad?
16
Tu edad es: 16
10
h
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);
}
}
}
xxxxxxxxxx
h
o
l
a
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:
xxxxxxxxxx
for (<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:
xxxxxxxxxx
import 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: 22
22
14
2
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);
}
}
x0
1
2
3
4
**********
0
1
2
3
4
**********
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.