Как добавить и добавить 2D-массивы в Java без копирования массива, предполагая, что размеры столбцов одинаковы? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытался следовать этому Как правильно добавить два 2D-массива в Java? Удаление всех копий массива, но что-то не так.Я также попробовал другое руководство, но оно работало, только если строки были одинаковыми.

public int [][] appendMatrix(int[][]matrix, int [][] matrix2)
    {

        this.matrix = new int[matrix.length + matrix2.length][matrix[0].length];
        for(int i = 0; i < matrix.length; i++)
        {
            for(int j = 0; j < matrix[i].length; j++)
            {
                this.matrix[i][j] = matrix[i][j];
            }
            for(int j = matrix.length; j < matrix.length + matrix2.length; j++)
            {
                this.matrix[i][j]= matrix2[i-matrix.length][j];
            }   
        }
        return this.matrix;**

1 Ответ

0 голосов
/ 18 февраля 2019

Важно учитывать, что, когда мы переходим от последней строки в нашей первой матрице, мы хотим сохранить это значение, чтобы мы могли использовать его для добавления строки с первой по n-ю нашу вторую матрицу в нашу результирующую матрицу,без потери дорожки.

Пример вывода: вывод в виде массива и отображение в виде матрицы

package matrix;

// I know you don't want to use imports, this is simply for testing purposes.
import java.util.Arrays;

public class MatrixAddition
{
    public static void main(String[] args)
    {
        int[][] matrix1 =
        {
                { 1, 2, 3 },
                { 4, 5, 6 },
                { 7, 8, 9 },
                { 10, 11, 12 } };
        int[][] matrix2 =
        {
                { 1, 1, 1 },
                { 2, 3, 4 } };


        System.out.println("Appending the two matrices results in: ");
        System.out.println(Arrays.deepToString(twoDMatrixAppend(matrix1, matrix2)));
        printMatrix(twoDMatrixAppend(matrix1, matrix2));

        System.out.println("\nPrepending the two matrices results in: ");
        System.out.println(Arrays.deepToString(twoDMatrixPrepend(matrix1, matrix2)));
        printMatrix(twoDMatrixPrepend(matrix1, matrix2));
    }


    private static int[][] twoDMatrixAppend(int[][] matrix1, int[][] matrix2)
    {
        if (matrix1[0].length != matrix2[0].length)
        {
            return null; // Or throw new incompatible matrices exception
        }

        int resultingRowLength = matrix1.length + matrix2.length; // The new length of the resulting matrix

        int[][] result = new int[resultingRowLength][matrix1[0].length];

        int currentRow, col, matrixTwoRowStart;
        for (currentRow = 0; currentRow < matrix1.length; currentRow++)
        {
            for (col = 0; col < matrix1[0].length; col++)
            {
                result[currentRow][col] = matrix1[currentRow][col];
            }
        }

        for (matrixTwoRowStart = 0; matrixTwoRowStart < matrix2.length; matrixTwoRowStart++, currentRow++)
        {
            for (col = 0; col < matrix2[0].length; col++)
            {
                result[currentRow][col] = matrix2[matrixTwoRowStart][col];
            }
        }

        return result;
    }

    private static int[][] twoDMatrixPrepend(int[][] matrix1, int[][] matrix2)
    {
        return twoDMatrixAppend(matrix2, matrix1);
    }

    private static void printMatrix(int[][] arr)
    {
        System.out.println();
        int row, col;
        for (row = 0; row < arr.length; row++)
        {
            for (col = 0; col < arr[0].length; col++)
            {
                System.out.print(String.format("%4d", arr[row][col]));
            }
            System.out.println();
        }
    }

}
...