Aprende Java Fácil. Ejercicios tema 8

Ejercicios tema 8

Ejercicio 1. Crea una matriz 2D de 5×5 que represente las celdas de una cárcel. Llena todas las posiciones con el valor 0, indicando que todas las celdas están vacías.

Solución:

 

public class Main {

    public static void main(String[] args) {
        int[][] celdas = new int[5][5];

        // Llenar la matriz con 0
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                celdas[i][j] = 0;
            }
        }

        // Imprimir la matriz
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                System.out.print(celdas[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Ejercicio 2. Supongamos que las celdas [0][1], [2][2] y [4][3] están ocupadas por prisioneros. Actualiza la matriz del ejercicio anterior para reflejar esto usando el valor 1 para las celdas ocupadas.

Solución:

 

public class Main {

    public static void main(String[] args) {
        int[][] celdas = new int[5][5];

        // Llenar la matriz con 0
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                celdas[i][j] = 0;
            }
        }

        // Marcar las celdas ocupadas
        celdas[0][1] = 1;
        celdas[2][2] = 1;
        celdas[4][3] = 1;

        // Imprimir la matriz
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                System.out.print(celdas[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Ejercicio 3. Cuenta cuántas celdas están ocupadas en la matriz creada en el ejercicio 2.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        int contador = 0;

        // Contar las celdas ocupadas
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                if (celdas[i][j] == 1) {
                    contador++;
                }
            }
        }

        System.out.println("Celdas ocupadas: " + contador);
    }
}

Ejercicio 4. Libera al prisionero de la celda [2][2] en la matriz del ejercicio 2 y actualiza la matriz.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        // Liberar al prisionero
        celdas[2][2] = 0;

        // Imprimir la matriz
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                System.out.print(celdas[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Ejercicio 5. Encuentra todas las celdas vacías en la matriz del ejercicio 2 y muestra sus posiciones.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        System.out.println("Celdas vacías:");

        // Encontrar las celdas vacías
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                if (celdas[i][j] == 0) {
                    System.out.println("[" + i + "][" + j + "]");
                }
            }
        }
    }
}

Ejercicio 6. Transfiere un prisionero de la celda [4][3] a la celda [1][4] en la matriz del ejercicio 2

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        // Transferir el prisionero
        celdas[4][3] = 0;
        celdas[1][4] = 1;

        // Imprimir la matriz
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                System.out.print(celdas[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Ejercicio 7. Cuenta cuántas celdas vecinas ocupadas tiene la celda [2][2] en la matriz del ejercicio número 2.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        int[][] direcciones = {
            {-1, -1}, {-1, 0}, {-1, 1},
            { 0, -1},          { 0, 1},
            { 1, -1}, { 1, 0}, { 1, 1}
        };

        int x = 2, y = 2;
        int contador = 0;

        // Contar las celdas vecinas ocupadas
        for (int[] dir : direcciones) {
            int nuevoX = x + dir[0];
            int nuevoY = y + dir[1];

            if (nuevoX >= 0 && nuevoX < celdas.length && nuevoY >= 0 && nuevoY < celdas[0].length) {
                if (celdas[nuevoX][nuevoY] == 1) {
                    contador++;
                }
            }
        }

        System.out.println("Celdas vecinas ocupadas de [2][2]: " + contador);
    }
}

💡Inicialización y Declaración: Siempre inicializa tu matriz correctamente después de declararla. Puedes hacerlo en una sola línea para mantener el código limpio y fácil de leer.

💡Uso de Bucles Anidados: Utiliza bucles anidados para recorrer y manipular elementos en la matriz. El bucle externo recorre las filas y el bucle interno recorre las columnas. Esto es esencial para realizar operaciones en cada elemento de la matriz.

Ejercicio 8. Encuentra todos los prisioneros en la fila 0 de la matriz del ejercicio 2 y muestra sus posiciones.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        System.out.println("Prisioneros en la fila 0:");
        
        for (int j = 0; j < celdas[0].length; j++) {
            if (celdas[0][j] == 1) {
                System.out.println("[0][" + j + "]");
            }
        }
    }
}

💡Comprueba Límites: Asegúrate de no exceder los límites de la matriz. Siempre verifica que tus índices estén dentro del rango válido.

Ejercicio 9. Rota la matriz del ejercicio 2 90 grados en el sentido de las agujas del reloj.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        int[][] rotada = new int[celdas[0].length][celdas.length];

        // Rotar la matriz 90 grados hacia la derecha
        for (int i = 0; i < celdas.length; i++) {
            for (int j = 0; j < celdas[i].length; j++) {
                rotada[j][celdas.length - 1 - i] = celdas[i][j];
            }
        }

        // Imprimir la matriz rotada
        for (int i = 0; i < rotada.length; i++) {
            for (int j = 0; j < rotada[i].length; j++) {
                System.out.print(rotada[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Ejercicio 10. Verifica si existe un patrón de escape en la matriz del ejercicio 2, definido como tres celdas ocupadas consecutivas en cualquier fila.

Solución:

 

public class Main {

    public static void main(String[] args) {

        int[][] celdas = {
            {0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0},
            {0, 0, 0, 0, 0},
            {0, 0, 0, 1, 0}
        };

        boolean escapeEncontrado = false;

        for (int i = 0; i < celdas.length && !escapeEncontrado; i++) {
            int consecutivas = 0;

            for (int j = 0; j < celdas[i].length; j++) {
                if (celdas[i][j] == 1) {
                    consecutivas++;
                    if (consecutivas == 3) {
                        escapeEncontrado = true;
                        break;
                    }
                } else {
                    consecutivas = 0;
                }
            }
        }

        if (escapeEncontrado) {
            System.out.println("¡Patrón de escape encontrado!");
        } else {
            System.out.println("No se encontró patrón de escape.");
        }
    }
}