Tutorial java para principiantes parte 3. Bucles while y for

Bucles while y for

Ejercicios para programación en java. Aprende a utilizar los bucles while y for con simples ejercicios con sus respectivas soluciones.

Un bucle sirve para repetir código reiteradas veces.

Imaginemos que quisieramos visualizar en pantalla diez veces la frase "Hola mundo". Hasta ahora tendriamos que escribir 10 System.out.println("Hola mundo") para cada linea. Pero si usamos un bucle podremos hacer lo mismo con un solo System.out.println("Hola mundo")

Código sin bucle
public static void main(String[] args) {
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
    System.out.println("Hola mundo");
}
Código utilizando un bucle while
public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 10){
        System.out.println("Hola mundo");
        numero++;
    }
}

Ambos programas mostrarán el mismo resultado como se puede apreciar aquí

run:
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
BUILD SUCCESSFUL (total time: 0 seconds)
Partes del bucle while
while (numero <= 10){
    System.out.println("Hola mundo");
    numero++;
}

Como puedes ver la estructura del while es muy similar a la del if. Dentro de los paréntesis debes indicar una condición para que se repita el contenido del while.

  • Variable que se quiere comparar
  • Operador lógico de comparación
  • Valor con el que se compara

Dentro del while podrás obsertar que la variable numero se incrementa (numero++;). Esto permite que el blucle NO se repita hasta el infinito y cuando la variable contador llegue a 10 el cursor del programa saldra del bucle while.


Práctica con bucle while

1) Visualizar 15 veces la frase "Hay un árbol en el prado".

public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 15){
        System.out.println("Hay un árbol en el prado");
        numero++;
    }
}

2) Visualizar del 1 al 10 en pantalla.

run:
1
2
3
4
5
6
7
8
9
10
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 10){
        System.out.println(numero);
        numero++;
    }
}

3) Como en el ejemplo anterior pero del 10 al 1

run:
10
9
8
7
6
5
4
3
2
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 10){
        System.out.println(numero);
        numero++;
    }
}

4) Visualizar del 2 al 10 en pantalla pero de 2 en 2.

run:
2
4
6
8
10
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    int numero = 2;
        
    while (numero <= 10){
        System.out.println(numero);
        numero+=2;
    }
}

5) Visualizar del 2 al 1024 multiplicandose de forma exponencial (numero *= 2)

run:
2
4
8
16
32
64
128
256
512
1024
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    int numero = 2;
        
    while (numero <= 1024){
        System.out.println(numero);
        numero*=2;
    }
}

6) Solicita al usuario introducir un número positivo. Visualizar desde el número introducido por el usuario hasta el 1.

run:
Introduce un número positivo
Número: 4
4
3
2
1
BUILD SUCCESSFUL (total time: 4 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce un número positivo");
    System.out.print("Número: ");
    int numero = teclado.nextInt();

    while (numero > 0){
        System.out.println(numero);
        numero--;
    }
}

7) Solicita al usuario un número menor de 10 y otro mayor a 10. Visualiza los números entre ambos valores.

run:
Introduce un número menor a 10
Número: 8
Introduce un número mayor a 10
Número: 11
8
9
10
11
BUILD SUCCESSFUL (total time: 5 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce un número menor a 10");
    System.out.print("Número: ");
    int numero1 = teclado.nextInt();

    System.out.println("Introduce un número mayor a 10");
    System.out.print("Número: ");
    int numero2 = teclado.nextInt();

    while (numero1 <= numero2){
        System.out.println(numero1);
        numero1++;
    }
}

8) Solicita al usuario un número mayor de 10 y otro entre el 1 y el 10. Visualiza los números desde el 0 hasta el primer número introducido por el usuario, el incremento debe ser el segundo número introducido por el usuario.

run:
Introduce un número mayor a 10
Número: 20
Introduce un número entre el 1 y el 10
Número: 5
0
5
10
15
20
BUILD SUCCESSFUL (total time: 7 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce un número mayor a 10");
    System.out.print("Número: ");
    int numero1 = teclado.nextInt();

    System.out.println("Introduce un número entre el 1 y el 10");
    System.out.print("Número: ");
    int numero2 = teclado.nextInt();

    int contador = 0;

    while (contador <= numero1){
        System.out.println(contador);
        contador+= numero2;
    }
}

9) Realiza la tabla de multiplicar del 2. El resultado final sería como se muestra a continuación

2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
2 X 10 = 20
public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 10){
        int resultado = 2 * numero;
        System.out.println("2 X " + numero + " = " + resultado);
        numero++;
    }
}

10) Solicita al usuario que tabla de multiplicar desea visualizar

run:
Introduce la tabla de multiplicar que deseas ver
Tabla: 3
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
3 X 10 = 30
BUILD SUCCESSFUL (total time: 4 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce la tabla de multiplicar que deseas ver");
    System.out.print("Tabla: ");
    int tabla = teclado.nextInt();
    int numero = 1;

    while(numero <= 10){
        int resultado = tabla * numero;
        System.out.println(tabla + " X " + numero + " = " + resultado);
        numero++;
    }
}

11) Realizar una tabla como la de multiplicar pero visualiza la elevación del 2 a la potencia del 1,2,3,4,5,6,7,8,9 y 10. Utiliza la clase de java Math.pow(2, numero). donde número será la potencia, en nuestro caso del 1 al 10. El resultado final es como se muestra a continuación

2 pow 1 = 2.0
2 pow 2 = 4.0
2 pow 3 = 8.0
2 pow 4 = 16.0
2 pow 5 = 32.0
2 pow 6 = 64.0
2 pow 7 = 128.0
2 pow 8 = 256.0
2 pow 9 = 512.0
2 pow 10 = 1024.0
public static void main(String[] args) {
    int numero = 1;
        
    while (numero <= 10){
        double resultado = Math.pow(2, numero);
        System.out.println("2 pow " + numero + " = " + resultado);
        numero++;
    }
}

12) Realiza un programa que sume valores introducido por el usuario. Para ello crea una variable tipo int con valor inicial cero el cual almacenará la suma de los valores introducido por el usuario. El scanner (solicitar un valor al usuario) debe estar dentro del bucle. Cuando el total llegue a 100 saldrá del bucle y visualizara el total.

run:
Introduce un valor a sumar
5
Introduce un valor a sumar
40
Introduce un valor a sumar
70
El total es 115
BUILD SUCCESSFUL (total time: 20 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    int total = 0;

    while(total <= 100){
        System.out.println("Introduce un valor a sumar");
        int valor = teclado.nextInt();
        total+= valor;
    }
    System.out.println("El total es " + total);
}

13) Crea un programa donde pregunte al usuario la siguiente frase: "Introducir la clave secreta para acceder al sistema:". El usuario solo podrá continuar cuando introduzca la clave secreta 1234. En caso contrario deberá volverse a solicitar la clave como se muestra en el ejemplo

run:
Introducir la clave secreta para acceder al sistema: 
235
Introducir la clave secreta para acceder al sistema: 
564
Introducir la clave secreta para acceder al sistema: 
1234
HAS ACCEDIDO AL SISTEMA
BUILD SUCCESSFUL (total time: 11 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
    int clave = 0;

    while (clave != 1234){
        System.out.println("Introducir la clave secreta para acceder al sistema: ");
        clave = teclado.nextInt();
    }
    System.out.println("HAS ACCEDIDO AL SISTEMA");
}

14) Solicita el nombre del usuario y visualiza el nombre, pero entre cada letra introduce un asterisco como se visualiza a continuación:

run:
Introduce tu nombre
carlos
c * a * r * l * o * s *

Recuerda usar los métodos lenght() del objeto String para obtener la cantidad de caracteres, y el método charAt() o substring() para obtener la letra del String.

public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce tu nombre");
    String nombre = teclado.next();
    int caracteres = nombre.length();
    int contador = 0;

    while(contador < caracteres){
        char letra = nombre.charAt(contador);
        System.out.print(letra + " * ");
        contador++;
    }
}

15) Crea una lista para la compra. En el bucle debes solicitar los productos. Para finalizar la lista (salir del bucle) El usuario debe introducir salir. Al finalizar muestra todos los productos como se muestra a continuación

run
*********** Listra de compras **********
introduce 'salir' para finalizar la lista
Introduce un producto
harina
Introduce un producto
azucar
Introduce un producto
huevos
Introduce un producto
salir
Tu lista completa: harina,azucar,huevos,
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("*********** Listra de compras **********");
    System.out.println("introduce 'salir' para finalizar la lista");
    String texto = "";
    boolean salir = false;

    while(!salir){
        System.out.println("Introduce un producto");
        String palabra = teclado.next();
        if(palabra.compareTo("salir") == 0){
            salir = true;
        }else{
            texto += palabra + ",";
        }
    }
    System.out.println("Tu lista completa: " + texto);
}

16) Igual que el paso 13 pero que además visualice la cantidad de intentos realizados.

run:
Introducir la clave secreta para acceder al sistema: 
12
Introducir la clave secreta para acceder al sistema: 
34
Introducir la clave secreta para acceder al sistema: 
1234
HAS ACCEDIDO AL SISTEMA
NÚMERO DE INTENTOS 3
BUILD SUCCESSFUL (total time: 8 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
    int clave = 0;
    int intentos = 0;

    while (clave != 1234){
        System.out.println("Introducir la clave secreta para acceder al sistema: ");
        clave = teclado.nextInt();
        intentos++;
    }
    System.out.println("HAS ACCEDIDO AL SISTEMA");
    System.out.println("NÚMERO DE INTENTOS " + intentos);
}

17) Igual que el paso 13 pero si la cantidad de intentos es superior a 3 se deniega el acceso y no permite entrar la contraseña.

run:
Introducir la clave secreta para acceder al sistema: 
123
Introducir la clave secreta para acceder al sistema: 
1456
Introducir la clave secreta para acceder al sistema: 
3456
ACCESO AL SISTEMA DENEGADO
BUILD SUCCESSFUL (total time: 8 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
    int clave = 0;
    int intentos = 0;

    while (clave != 1234 && intentos < 3){
        System.out.println("Introducir la clave secreta para acceder al sistema: ");
        clave = teclado.nextInt();
        intentos++;
    }
    if(clave == 1234){
        System.out.println("HAS ACCEDIDO AL SISTEMA");
    }else{
        System.out.println("ACCESO AL SISTEMA DENEGADO");
    }
}

18) Solicita el nombre del usuario y una letra. Visualiza la cantidad de veces que aparece la letra en el nombre del usuario. Recuerda usar length() y substring() de la clase String, y usa una variable tipo String para la letra (no uses char)

run:
Introduce tu nombre
matias
Introduce una letra
a
La letra aparece un total de 2 veces
BUILD SUCCESSFUL (total time: 6 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce tu nombre");
    String nombre = teclado.next();

    System.out.println("Introduce una letra");
    String letra = teclado.next();

    int count = nombre.length();
    int index = 0;
    int coincidencias = 0;

    while(index < count){
        String letranombre = nombre.substring(index, index+1);
        index++;
        if(letra.compareTo(letranombre) == 0){
            coincidencias++;
        }
    }
    System.out.println("La letra aparece un total de " + coincidencias + " veces");
}

19) Solicita el nombre del usuario y visualiza la cantidad de vocales y consonantes

run:
Introduce tu nombre
alberto
Tu nombre tiene 3 vocales y 4 consonantes.
BUILD SUCCESSFUL (total time: 3 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce tu nombre");
    String nombre = teclado.next();

    int count = nombre.length();
    int index = 0;
    int vocales = 0;

    while (index < count){
        String letra = nombre.substring(index, index+1);
        index++;
        if(letra.compareTo("a") == 0 || letra.compareTo("e") == 0 || letra.compareTo("i") == 0 || letra.compareTo("o") == 0 || letra.compareTo("u") == 0){
            vocales++;
        }
    }

    System.out.println("Tu nombre tiene " + vocales + " vocales y " + (count-vocales) + " consonantes.");
}

20) Solicita el nombre del usuario y visualiza el mismo en sentido inverso

run:
Introduce tu nombre
alberto
otrebla
BUILD SUCCESSFUL (total time: 3 seconds)
public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
        
    System.out.println("Introduce tu nombre");
    String nombre = teclado.next();

    int count = nombre.length();
    int index = count-1;

    while (index >= 0){
        String letra = nombre.substring(index, index+1);
        System.out.print(letra);
        index--;
    }
}

Bucle For

El bucle for es un bucle muy flexible y a la vez muy potente ya que tiene varias formas interesantes de implementarlo, su forma más tradicional es la siguiente:

for (/* inicialización */; /* condición */; /* incremento */) {
    /* código a ejecutar */
}

Inicialización: en esta parte se inicia la variable que controla el bucle y es la primera sentencia que ejecuta el bucle. Sólo se ejecuta una vez ya que solo se necesita al principio del bucle. Expresión condicional: al igual que en el bucle while, esta expresión determina si el bucle continuará ejecutándose o no. Incremento: es una sentencia que ejecuta al final de cada iteración del bucle. Por lo general, se utiliza para incrementar la variable con que se inicio el ciclo. Luego de ejecutar el incremento, el bucle revisa nuevamente la condición, si es verdadera tiene lugar una ejecución más del cuerpo del ciclo, si es falsa se termina el ciclo y así. Aquí se muestra el mismo ejemplo visto para el bucle while, pero implementado con un bucle for:

public static void main(String[] args) {
    for (int n = 0; n < 10; n++){
        System.out.println("Hola mundo");
    }
}

Al ejecutar visualizariamos lo siguiente:

run:
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
Hola mundo
BUILD SUCCESSFUL (total time: 0 seconds)

Práctica con bucle for

1) Visualiza en pantalla del 1 al 10

run:
1
2
3
4
5
6
7
8
9
10
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    for(int n=1; n <= 10; n++){
        System.out.println(n);
    }
}

2) Visualiza en pantalla del 10 al 1

run:
10
9
8
7
6
5
4
3
2
1
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    for(int n=10; n > 0; n--){
        System.out.println(n);
    }
}

3) Visualiza en pantalla del 2 al 10 pero de dos en dos

run:
2
4
6
8
10
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    for(int n=2; n <= 10; n+=2){
        System.out.println(n);
    }
}

4) Realiza la tabla de multiplicar del 2 pero utilizando el blucle for.

run:
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
BUILD SUCCESSFUL (total time: 0 seconds))
public static void main(String[] args) {
    for(int n=1; n <= 10; n++){
        System.out.println("2 x " + n + " = " + (2*n));
    }
}

5) Realiza un bucle for del 1 al 10. Pero visualiza solo los números pares. Calcula el módulo con % (variable % 2 == 0) para saber si es un número par

run:
2
4
6
8
10
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    for(int n=1; n <= 10; n++){
        int resultado = n%2;
        if(resultado == 0){
            System.out.println(n);
        }
    }
}

Anidar un bucle for

Al igual que un if un bucle también puede ser anidado. Anidar, como se explico anteriormente, es introducir dentro de un bloque otro igual. Como se muestra a continuación

public static void main(String[] args) {
    //primer bucle
    for(int n=1; n <= 10; n++){
        //segundo bucle anidado
        for(int r=1; r <= 10; r++){

        }
    }
}

6) Utilizando dos bucles for anidados visualiza del 1 al 10 en una misma fila unas 10 veces como muestra el resultado siguiente. Recuerda usar print y println para mostrar en consola.

run:
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10  
BUILD SUCCESSFUL (total time: 0 seconds)
public static void main(String[] args) {
    for(int n=1; n <= 10; n++){
        for(int r=1; r <= 10; r++){
            System.out.print(r + " ");
        }
        System.out.println(" ");
    }
}

7) Utilizando dos bucles for anidados visualiza las tablas de multiplicación del 1 hasta la del 10

run:
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10

2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
        ... continua 
public static void main(String[] args) {
    for(int n=1; n <= 10; n++){
        for(int r=1; r <= 10; r++){
            System.out.println(n + " x " + r + " = " + (n*r));
        }
        System.out.println("");
    }
}

Comentar

Para poder realizar comentarios. Primero debes inicar sesión o crear una cuenta.