Daniel Netzer
Daniel Netzer

Reputation: 2232

duplicating a 2D array in a loop using basic commands

public static int[][] copyMatrix(int[][] matrix) 
{
    for (int i = 0; (i < matrix.length); i++)
    {
        int[][] duplicateMatrix = new int[matrix.length][matrix[i].length];

            for (int j = 0; (j < matrix[i].length); j++)
            {
                duplicateMatrix[i][j] = matrix[i][j];
            }
    }
    return duplicateMatrix;
}

hello all, this specific function doesnt seem to work since duplicateMatrix isnt initialized as a variable, but I cant seem to initialize since its being created in the loop, I cant find a way to generate the amount of cells need in a column. help will be appreciated. thanks.

Upvotes: 2

Views: 57

Answers (2)

Eran
Eran

Reputation: 393771

You should initialize the array before the loops, since you only want to initialize it once.

public static int[][] copyMatrix(int[][] matrix) 
{
    if (matrix.length < 1) {
        return new int[0][0];
    }
    int[][] duplicateMatrix = new int[matrix.length][matrix[0].length];
    for (int i = 0; (i < matrix.length); i++)
    {
            for (int j = 0; (j < matrix[i].length); j++)
            {
                duplicateMatrix[i][j] = matrix[i][j];
            }
    }
    return duplicateMatrix;
}

This code assumes that all the rows in your input array have the same number of elements (which is true for matrices).

You can relax this assumption if you remember that a 2-dimentional array is simply an array of arrays :

public static int[][] copyMatrix(int[][] matrix) 
{
    int[][] duplicateMatrix = new int[matrix.length][];
    for (int i = 0; (i < matrix.length); i++)
    {
            duplicateMatrix[i] = new int[matrix[i].length];
            for (int j = 0; (j < matrix[i].length); j++)
            {
                duplicateMatrix[i][j] = matrix[i][j];
            }
    }
    return duplicateMatrix;
}

Upvotes: 6

jalynn2
jalynn2

Reputation: 6457

A two-dimensional array is an array of arrays. You must first create the two-dimensional array, and then each one of its element individually:

public static int[][] copyMatrix(int[][] matrix) 
{
    int[][] duplicateMatrix = new int[matrix.length][];
    for (int i = 0; (i < matrix.length); i++)
    {
        duplicateMatrix[i] = new int[matrix[i].length];

        for (int j = 0; (j < matrix[i].length); j++)
        {
            duplicateMatrix[i][j] = matrix[i][j];
        }
    }
    return duplicateMatrix;
}

Upvotes: 1

Related Questions