2015-02-25 4 views
5

Я прочитал Java: полный справочник (9). В Character 5: Операторы управления - Перебор многомерные массивы раздел Запись:Foreach с многомерными массивами в Java

Улучшенная версия для также работает на многомерных массивов. Помните, однако, что в Java многомерные массивы состоят из массивов массивов . (Например, двумерный массив представляет собой массив одномерных массивов .) Это важно при итерации по многомерному массиву , поскольку каждая итерация получает следующий массив: не отдельный элемент. Кроме того, переменная итерации в цикле должна быть совместима с типом получаемого массива. Например, для случая переменная итерации должна быть ссылкой на одномерный массив. В общем случае при использовании for-each для итерации по массиву из N измерений, Полученные объекты будут массивами размеров N-1. Чтобы понять значение , рассмотрите следующую программу. Он использует вложенные для циклов, чтобы получить элементы двумерного массива в row-order, от первого до последнего.

Я не могу понять, почему «перебирать массив N размеров, объектов, полученные будут массивами N-1 измерений». Это правда?

+2

Вы посмотрели «следующую программу»? Кажется, что пример может иметь хорошее объяснение. – ryanyuyu

ответ

8

Массив N размеров действительно массив (N -1) n-мерных массивов. Поэтому, когда мы перебираем массив размером N, мы итерируем по всем его составляющим (N -1) -мерным массивам, как указано.

Для примера рассмотрим 2-мерный массив:

int[][] array = {{1,2,3}, {4,5,6}}; 

Это действительно массив 1-мерных массивов: {1,2,3} и {4,5,6}.

+0

У вас нет * have *, чтобы обновить каждый вводимый вами символ. –

+0

@MaartenBodewes Мой OCD иногда получает лучшее из меня. – arshajii

+0

:) Мне всегда приходится корректировать это слишком, слишком много обновлений. На [tag: java] это хуже, чем больше конкуренция. –

1

Представьте свой многомерный массив как (x, y, z). Когда вы перебираете первую координату, вы фиксируете x (x = 1, 2, ..., n) и получаете (y, z) 2d-массив.

Затем вы фиксируете y (y = 1, 2, ..., m) и получаете (z) 1d-массив.

0

Когда вы перебираете массив, вы «устанавливаете» одно измерение и не оставляете остальных. Поэтому, когда у вас есть размерный массив N, когда вы вводите цикл, вы используете массив измерений N-1 (внутри цикла for-each).

1

Рассмотрим трехмерную матрицу (математически определенную).

Когда вы повторяете строки, вы получаете двумерные матрицы, и когда вы итерации через каждую из двухмерных матриц вы получаете одномерные векторы.

// Three dimensions 
    String[][][] stringArray = new String[3][3][3]; 

    // Iterating over one dimension 
    // results in two dimensional array 
    for (String[][] strings : stringArray) { 
     // Iterating over one dimension 
     // results in one dimensional array 
     for (String[] strings2 : strings) { 
      // Iterating over one dimension 
      for (String string : strings2) { 

      } 
     } 
    }