0

自去年 3 年以来,我一直在尝试学习 Java,但我仍然发现我在 Core java 方面非常薄弱。

我对以下代码有以下疑问,请帮助我。

  • 为什么nums[i][j]=(i+1)*(j+1);,与 .(i+1)*(j+1)一起使用+1
  • 为什么 firstarray[]用于初始化 for-each 循环,即 inlinefor(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);   
}
4

3 回答 3

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

如果它不与+1i 为 0 或 j 为 0 的所有位置一起使用,则为 0。例如,i=2 和 j=0:如果+1不在那里使用,结果将为 2*0 = 0。相反,它变成了 3。

完整的原因不是我们可以在这里回答的,而是取决于稍后在代码中如何使用二维数组。由于代码所做的只是创建一个二维数组,然后打印它的值,因此需要 +1 来打印该结果。

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

因为在遍历二维数组时,每个位置都是一维数组。然后您必须遍历一维数组以打印出每个单个项目(每个int)。

例如,考虑一个棋盘。当您遍历棋盘时,您会遍历列/行。然后,当您有一个列/行时,您必须对其进行迭代以获得棋盘的每个方格。当您完成对一列/行的迭代后,外部迭代继续进行到下一列/行。

于 2013-11-10T14:02:55.060 回答
1

为什么 nums[i][j]=(i+1) (j+1); , (i+1) (j+1) 与 +1 一起使用。

这完全是任意的,它只是为二维数组赋值。

为什么第一个数组 [] 用于初始化 for-each 循环,即在 for(int x[]:nums)..

因为它是一个二维数组,所以要访问所有元素,您必须先访问每个子数组,然后再访问这些子数组中的元素。

于 2013-11-10T14:02:42.930 回答
0

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

它用于将值分配给数组。

为什么第一个数组[] 用于初始化for-each 循环,即在for(int x[]:nums) 行中。.

它是增强的 for 循环。所以如果你回到教科书,这个 for 循环是在 JDK5 中添加的,旨在循环遍历对象集合,例如从头到尾以严格顺序方式的数组。

for(int x[]:nums){ }

这里 nums 是一个二维数组,循环的每次迭代都会检索下一个元素,它是一个数组并存储在 x 中,这就是为什么需要将 x 声明为一维数组的原因。x 是一个临时变量,它在每次迭代中引用 nums 中的一个元素,并且 nums 的元素是一维数组,因此 x 的类型必须声明为数组。

于 2013-11-10T14:47:59.813 回答