firestruq
firestruq

Reputation: 739

how to copy two-dimension array from one to another in java

I would like to know what is the right way to copy two-dimension array from temporary array into original array. The array size is unknown at the beginning of the program and user is set it later on. here's the code:

private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][], int row, int column)

{

      for ( int i = 0 ; i < row-1; ++i)
      {
          for (int j = 0; j < column; j++)
          {
              origin_Matrix[i][j] = copy_Matrix[i][j]; 

          }
      }

}

I know it's wrong, please help..

Upvotes: 3

Views: 2415

Answers (4)

ring bearer
ring bearer

Reputation: 20783

@Eden

The code is not that perfect; why are you doing a i < row-1

check on first for loop? I guess you should have done i < row check instead

Also, you do not require to pass the sizes explicitly. You could use .length field on arrays to get their sizes.

Upvotes: 0

pajton
pajton

Reputation: 16226

You'd better end with something like:

private static int[][] copy_Matrix(int origin_Matrix[][])
{
    int copy[][] = new int[origin_Matrix.length][origin_Matrix[0].length];
    for ( int i = 0 ; i < origin_Matrix.length; ++i)
    {
        System.arraycopy(origin_Matrix[i], 0, copy[i], 0, origin_Matrix[i].length);
    }
    return copy;
}

Upvotes: 2

Ricket
Ricket

Reputation: 34057

No prefix increment necessary in Java. Also you don't need to pass a row and column count in Java (that only leaves room for error). And, there exists a function, System.arraycopy which should be at least as efficient as copying them one at a time, if not more so.

private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][])
{
    /* assert origin_Matrix.length == copy_Matrix.length */
    for ( int i = 0 ; i < origin_Matrix.length; i++)
    {
        /* assert origin_Matrix[i].length == copy_Matrix[i].length */
        System.arraycopy(origin_Matrix[i], 0, copy_Matrix[i], 0, origin_Matrix[i].length);
    }
}

Note that you should be aware of Java Collections (such as List/ArrayList or Vector) and consciously decide that the slight performance gains of an array of ints is necessary in your case, over the additional readability and convenience that the Collections provide.

Upvotes: 3

Zack Marrapese
Zack Marrapese

Reputation: 12080

Is there a reason you are using primitives for this instead of Java Collections? If not, I would use those. They are optimized, and provide a fairly robust API for manipulation.

Upvotes: 1

Related Questions