Как скопировать двумерный массив из одного в другой в Java - PullRequest
2 голосов
/ 31 марта 2010

Я хотел бы знать, как правильно копировать двумерный массив из временного массива в исходный массив. Размер массива неизвестен в начале программы, и пользователь устанавливает его позже. вот код:

частный статический void copy_Matrix (int origin_Matrix [] [], int copy_Matrix [] [], int row, int столбец)

{

* +1007 *

}

Я знаю, что это неправильно, пожалуйста, помогите ..

Ответы [ 4 ]

3 голосов
/ 31 марта 2010

Нет необходимости увеличения префикса в Java. Также вам не нужно передавать количество строк и столбцов в Java (это оставляет место для ошибки). Кроме того, существует функция System.arraycopy, которая должна быть как минимум такой же эффективной, как копирование их по одному, если не больше.

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);
    }
}

Обратите внимание, что вы должны знать о коллекциях Java (таких как List / ArrayList или Vector) и сознательно решить, что в вашем случае необходимо небольшое повышение производительности массива целых по сравнению с дополнительной удобочитаемостью и удобством, которые предоставляют коллекции. .

2 голосов
/ 31 марта 2010

Лучше бы закончить чем-то вроде:

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;
}
1 голос
/ 31 марта 2010

Есть ли причина, по которой вы используете для этого примитивы вместо Java Collections ? Если нет, я бы использовал их. Они оптимизированы и предоставляют достаточно надежный API для манипулирования.

0 голосов
/ 31 марта 2010

@ Eden

Код не так совершенен; почему ты делаешь i < row-1

проверить сначала цикл? Я думаю, вы должны были сделать i < row проверку вместо

Кроме того, вам не требуется явно передавать размеры. Вы можете использовать поле .length для массивов, чтобы получить их размеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...