Как получить доступ ко второй части 2d массива - PullRequest
1 голос
/ 31 марта 2011

Хорошо, я пытаюсь перебрать 2d массив для копирования из одного в другой.Я могу назначить целые числа из первой части, используя:

array1[i] = array2[i];

, но не могу сделать то же самое для другой части, например:

array1[][j] = array2[][j];  //this doesn't compile

ИЛИ

array1[0]j = array2[0][j];  //creates run time error

Как я могу специально скопировать вторую часть, но не первую?

Ответы [ 5 ]

6 голосов
/ 31 марта 2011

В двумерном массиве нет «первой части» и «второй части».В массиве объявлено i строк и j столбцов, объявленных x[j][i].

Теперь по технической части:

Java не имеет истинных 2-мерных массивов;у него есть массивы массивов, поэтому x[rows][cols] - это массив x из rows массивов из cols элементов (т. е. x[rows] - это массив массивов).

Итак, когда вы выполнили array1[i] = array2[i] вы копировали ссылки на массивы столбцов во втором массиве.

Но нет способа сделать зеркальное отображение этого - вы не можете копировать ссылки на строки, но сохраняете значения столбцов, потому чтомассив строк равен x.

Если вы ищете «глубокую копию», вы можете сделать это вручную с помощью:

for (int row = 0; row < array1.length; row++) {
    for (int col = 0; col < array1[row].length; col++) {
        array2[row][col] = array1[row][col];
    }
}
3 голосов
/ 31 марта 2011

Не совсем понятно, что вы имеете в виду.Имейте в виду, что «двумерный массив» на самом деле является просто массивом массивов.Ваш первый фрагмент кода просто копирует «ссылку на вложенный массив» из array2 в array1.

Так что же здесь означает «вторая часть»?Вы пытаетесь скопировать «столбец» из одного массива в другой?Если это так, просто помните: нет столбцов .Есть только массивы, массивы и т. Д.Если все «подмассивы» оказываются одинакового размера, это несколько случайно.Ничто не мешает вам делать:

array1[0] = new int[100];
array1[1] = new int[5];

Вы можете думать о «строках» (каждая из которых является массивом), но что будет означать «столбец 10» в приведенном выше примере?

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

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

for(int j = 0; j < yourJDimension; j++) {
    someValue = yourArray[1][j];
}

Это может помочь показать вам содержимое вашего массива и его структуру. Кроме того, вот быстрая ссылка, которая может быть несколько полезна:

http://www.leepoint.net/notes-java/data/arrays/arrays-2D.html

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

Если массивы a и b имеют одинаковый размер, это скопирует b в элемент по элементу

for(int i = 0; i < rows; i++)
    for(int j = 0; j < columns; j++)
        a[j][i] = b[j][i];

Ваш вопрос не имеет смысла.Вы не можете скопировать «вторую часть» матрицы.Подумайте об определении:

int a[5][5];

a - массив массивов.[0] это не int, это массив int.a [0] [0] однако является первым элементом первого массива, что делает его целым.

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

Попробуйте использовать этот класс, который выполняет копирование массивов: java.util.Arrays

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