2013-02-16 5 views
0

Может ли кто-нибудь объяснить мне, что означает следующий оператор из приведенного ниже кода .. ??Использование многомерного массива в Java

for (j = 0; j < arrayOfInts[i].length; j++)

Я изучаю Java язык и имеющий очень трудно понять его ..

class BreakWithLabelDemo { 
     public static void main(String[] args) { 

      int[][] arrayOfInts = { 
       { 32, 87, 3, 589 }, 
       { 12, 1076, 2000, 8 }, 
       { 622, 127, 77, 955 } 
      }; 
      int searchfor = 12; 

      int i; 
      int j = 0; 
      boolean foundIt = false; 

     search: 
      for (i = 0; i < arrayOfInts.length; i++) { 
       for (j = 0; j < arrayOfInts[i].length; 
        j++) { 
        if (arrayOfInts[i][j] == searchfor) { 
         foundIt = true; 
         break search; 
        } 
       } 
      } 

      if (foundIt) { 
       System.out.println("Found " + searchfor + " at " + i + ", " + j); 
      } else { 
       System.out.println(searchfor + " not in the array"); 
      } 
     } 
    } 

ответ

0

В Java реализованы двумерные массивы в одномерный массив одно- мерных массивов.

for (j = 0; j < arrayOfInts[i].length; j++) 

arrayOfInts[i].length означает длину й строки А. Н. arrayOfInts.

int[][] a = new int[2][4]; 

Этот двумерный массив будет иметь две строки и четыре столбца. Это фактически выделяет 3 объекта: одномерный массив из двух элементов для хранения каждого из массивов реальных строк и двух одномерных массивов из 4 элементов для представления содержимого строк.

+-----+ +-----+-----+-----+-----+ 
|a[0] | -> | [0] | [1] | [2] | [3] | 
|  | +-----+-----+-----+-----+ In Java two-dimensional arrays are implemented is a 
             one-dimensional array of one-dimensional arrays -- like this. 
+-----+ 
|  | +-----+-----+-----+-----+ 
|a[1] | -> | [0] | [1] | [2] | [3] | 
+-----+ +-----+-----+-----+-----+ 
1

В Java нет многомерного массива. Все есть массивы массивов.

arrayOfInts - такой массив массивов из цепей. Так arrayOfInts[i] представляет собой массив целых чисел, и

for (j = 0; j < arrayOfInts[i].length; j++) 

перебирает каждый элемент этого массива, т.е. он перебирает все элементы в массиве целых чисел, хранящихся в индексе i массива массивов целых чисел.

Вы можете увидеть его как большую коробку, содержащую N меньших ящиков, каждый меньший ящик, содержащий заданное число целых чисел. arrayOfInt - большая коробка. arrayOfInt[i] - i-я меньшая коробка в большой коробке. И цикл перебирает все целые числа в этом меньшем поле.

+1

'Нет многомерного массива в Java'. На каком языке существуют «многомерные» массивы, все есть только «массив массивов». Но он называется «многомерными» массивами. Нет никакой разницы между «многомерными массивами» и массивом массивов. –

+1

[Pascal] (http://www.tutorialspoint.com/pascal/pascal_multi_dimensional_arrays.htm) имеет многомерные массивы, а также [C#] (http://stackoverflow.com/questions/8177984/what-is-the- определение-of-a-true-multidimensional-array-and-what-languages-sup), например. Я уверен, что у других языков есть и их. Основное отличие состоит в том, что все строки в многомерном массиве имеют одинаковую длину, что не имеет места в массиве массивов. Другим является то, что строка может быть не нулевой в многомерном массиве, тогда как она может быть в массиве массивов. –

+0

'Многомерный массив' такой же, как' array of arrays'. В 2d массиве, имеющем 2 массива, если все 1d массивы имеют равную длину, хотя он будет называться 'array массивов'.
Else, даже если один массив 1d имеет разные значения. элементов, чем другой, это также «массив массивов», но он «зазубрен» –

2

Java не имеет многомерных массивов, он имеет массивы, которые могут содержать другие массивы. Этот код принимает i-й элемент из-под ошибочно названного arrayOfInts. Этот элемент представляет собой массив целых чисел, поэтому он принимает length этого массива. (Это был сохранен в другом массиве.) Так, например, в этом коде:

int[][] array2d = new int[][] { 
    new int[] {1},  // stored at array2d[0] 
    new int[] {2, 3, 4} // stored at array2d[1] 
} 

следующие условия:

  • array2d.length == 2 (. "Многомерный" массив содержит две другие массивы)
  • array2d[0].length == 1 (первый из которых имеет один элемент:. 1)
  • array2d[1].length == 3 (Второй состоит из трех элементов: 2, 3, 4)
0

J = 0. j < arrayOfInts [i].Длина

Потому что массив 2-мерный, внутренний элемент массива будет массив.

Таким образом, вы получаете элемент (который является массив) arrayOfInts [I] и вычисляет длину arrayOfInts [я] .Length, другими словами:

ИНТ [] = элемент arrayOfInts [я] ; int length = arrayOfInts [i] .length;

0

Придумайте arrayOfInts [я] [J] как двумерной сетке, как электронные таблицы. Чтобы визуализировать, предположим, что [j] представляет индекс столбца, а [i] представляет индекс строки.

Объяснение тогда:

// iterate through every column j in the current row i: 
for (j = 0; j < arrayOfInts[i].length; j++) 
0

В коде см слова int [][]arrayOfInts=...
Это 2-мерный массив.
2 мерных массива - это ничего, кроме arrays of arrays
Это означает, что будет много нормальных 1-мерных массивов, а еще один массив имеет ссылки каждого массива 1-d.
Таким образом, объяснение линии, for(j=0;j<arrayOfInts[i].length;j++) приводится ниже:
первый, позволяет сфокусировать внимание на слова arrayOfInts[i].length
Я уже говорил вам arrayOfInts это массив массивов. Итак, arrayOfInts[i] указывает на i-й массив. Слово, arrayOfInts[i].length возвращает длину (число элементов в массиве) в i-м массиве arrayOfInts.
Цикл продолжается до тех пор, пока j не будет меньше числа элементов в массиве 1d (меньше (не используйте равное), так как arrayOfInts [i] [0] будет первым элементом).

Смежные вопросы