es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Constructor de matriz 2D que toma una matriz menor, igual o mayor a 3×3.

Recibí un proyecto de mi carrera en el que estoy atascado en uno de los constructores.

  • El nombre del constructor debe ser como este Square3x3(int[][] array).
  • Tiene que construir una matriz 2D del tamaño 3×3, cuyos valores se toman de la matriz dada.
  • Si el tamaño de la matriz dada es mayor que 3×3, solo se toman las primeras 3×3 celdas.
  • Si la matriz dada es más pequeña, el resto de las celdas se inicializan en -1.

Tenga en cuenta que la matriz dada puede ser asimétrica o incluso tener filas de diferentes longitudes.

Asegúrese de inicializar las celdas en -1 solo si la celda correspondiente en la matriz dada no existe.

Se puede asumir que la matriz no es nula.

El siguiente código funciona para mí cuando la matriz dada es más grande que 3×3, pero no puedo hacer que funcione cuando es menos de 3×3.

Tenga en cuenta que todo esto debe estar en una clase diferente a main.

Gracias por la ayuda.

Obtuve el siguiente código:

public class Square3x3 {

    private int[][] Square3x3;

    public Square3x3(int[][] array) {
        Square3x3 = new int[3][3];
        int count =0;
        for (int i = 0; i < 3 && i < array.length; i++) {
            for (int j = 0; j < 3 && j < array[count].length; j++) {
                Square3x3[i][j] = array[i][j];
            }
            count++;
        }
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para inicializar las celdas restantes con -1 si la matriz dada es menor que 3×3, puede agregar una declaración if externa después de los bucles for existentes:

    public class Cuadrado3x3 {
    
        private int[][] Cuadrado3x3;
    
        public Cuadrado3x3(int[][]array) {
            Cuadrado3x3 = new int[3][3];
            int count = 0;
            for (int i = 0; i < 3 && i < array.length; i++) {
                for (int j = 0; j < 3 && j < array[count].length; j++) {
                    Cuadrado3x3[i][j] = array[i][j];
                }
                count++;
            }
            if (count < 3) { // si la matriz dada es menor que 3x3
                for (int i = count; i < 3; i++) {
                    for (int j = 0; j < 3; j++) {
                        Cuadrado3x3[i][j] = -1;
                    }
                }
            } else if (count == 3 && array[2].length < 3) { // si la matriz dada tiene menos de 3 columnas en la última fila
                for (int j = array[2].length; j < 3; j++) {
                    Cuadrado3x3[count-1][j] = -1;
                }
            }
        }
    }
    

    La declaración if externa verifica si el recuento es menor que 3 (lo que significa que no se utilizaron todas las filas de la matriz dada para construir la matriz 3×3) y, si es así, inicializa las celdas restantes con -1 utilizando otro conjunto de bucles for.

    Además, agregué una declaración else if para manejar el caso en que la matriz dada tiene una longitud de 3 para la última fila pero menos de 3 columnas. En este caso, solo las células restantes en la última fila deben inicializarse en -1.

    ¡Espero que esto te ayude a completar tu proyecto!

Comments are closed.