2013-11-10 7 views
0

Я пытаюсь изучить Java с последних 3-х лет, все же я нашел, что я очень слаб в Core java.Java: Итерация по многомерным массивам Концепция

У меня есть следующие сомнения из нижеследующего кода, пожалуйста, помогите мне.

  • почему nums[i][j]=(i+1)*(j+1);, (i+1)*(j+1) используется с +1.
  • почему первый array[] используется для инициализировать для-каждого цикла IE в строке for(int x[]:nums)..

Код:

//Use for-each style for on a 2-dimensional array 
//Code source:From online site 
public void foreachmultiarrya() 
{ 

    int nums[][]=new int [3] [5]; 
    //give nums some values 
       for(int i=0;i<3;i++) 
     for(int j=0;j<5;j++) 
      nums[i][j]=(i+1)*(j+1); 
    int sum=0; 
    for(int x[]:nums) 
    { 
     for(int y:x) 
     { 
      System.out.println("Value of y:"+y); 
      sum+=y; 
     } 
    } 
     System.out.println("Sum="+sum); 
} 
+0

Если мой вопрос не ясен, пожалуйста, прокомментируйте здесь, я попробую объяснить вам –

+1

Где этот фрагмент кода? Это учебник или что-то, что вы пытаетесь понять? Или это код написанный вами, который не работает так, как вы ожидали? –

+0

Ну, в первую очередь, вы всегда должны писать код, следуя соглашениям стиля. Если нет, гораздо труднее читать и понимать другие, тем самым менее вероятно, что кто-то захочет помочь вам. – broncoAbierto

ответ

3
why nums[i][j]=(i+1)*(j+1); , (i+1)*(j+1) is used with +1. 

Если он не будет использоваться +1 все позиции, где либо я равен 0 или J = 0 будет 0. Например, я = 2 и у = 0: Если бы +1не использоваться там , результат будет 2 * 0 = 0. Вместо этого он становится 3.

Полная причина для этого не является чем-то, что мы можем здесь ответить, но зависит от того, как 2-мерный массив используется позже код. Поскольку весь код делает это, чтобы создать двумерный массив, а затем распечатать его значения, для его распечатки должен быть нужен +1.

why first array[] is used to intialize the for-each loop i.e in line for(int x[]:nums).. 

Потому что при итерации по двумерному массиву каждое положение будет одномерным массивом. И тогда вам придется перебирать одномерный массив для печати каждого отдельного элемента (каждый int).

Например, рассмотрим шахматную доску. Когда вы перебираете шахматную доску, вы перебираете столбцы/строки. Затем, когда у вас есть столбец/ряд, вам нужно перебирать его, чтобы получить каждый квадрат шахматной доски. Когда вы закончите итерацию по одному столбцу/строке, внешняя итерация переходит к следующему столбцу/строке.

+0

Что это значит именно этой строкой 'nums [i] [j] = (i + 1) * (j + 1);'? , что я понимаю, эта строка присваивает значения 2D-массиву. –

+0

@ Danny Да, это просто назначение значений массиву. Он вычисляет значение для индекса '[i] [j]', используя i и j в расчете. Поэтому, если 'i' равно 2 и' j' равно 3, значение становится '(2 + 1) * (3 + 1)' = '3 * 4' = 12. –

+0

О, я понимаю, я понял сейчас, Почему мой ум скучен? –

1

почему НУМС [I] [J] = (I + 1) (j + 1); , (i + 1) (j + 1) используется с +1.

Это абсолютно произвольно, и это просто для присвоения значений двумерному массиву.

, почему первый массив [] используется для инициализировать для-каждого цикла, то есть в строке для (Int х []: НУМС) ..

Потому что это 2 двумерный массив, так доступ ко всем элементам, вы должны сначала получить доступ к каждому подматричному массиву, а затем к элементам в этих подмассивах.

+0

Пожалуйста, подождите, я пытаюсь подстроить ваши значения в словах –

+0

На самом деле я понял сейчас, это очень простой вопрос. Я не должен спрашивать, просто присваивая некоторые ценности, а не магические вещи, идущие туда. Я так глубоко думаю, поэтому я не понимаю –

0

nums [i] [j] = (i + 1) (j + 1); , (i + 1) (j + 1)

Используется для присвоения значения массиву.

Почему первый массив [] используется для инициализации цикла for-each в строке для (int x []: nums)..

Это улучшено для loop.So, если вы вернетесь в текстовую книгу, этот цикл цикла добавлен в JDK5 и предназначен для циклического перемещения по совокупности объектов, таких как массив строго последовательным образом от начала до конца ,

для (Int х []: НУМС) { }

Здесь НУМС является 2D массив и с каждой итерации цикла следующий элемент извлекается, который является массивом и хранится в х, поэтому вам нужно объявить x как одномерный массив. x - временная переменная, которая относится к одному элементу из nums в каждой итерации, а элементы nums - 1 размерный массив, поэтому тип of x должен быть объявлен как массив.

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