使用增强的for循环遍历2d数组行

时间:2017-07-31 15:05:24

标签: java arrays foreach

我一直在摸着头: 该方法只是在java中更改了2d数组的整行。

    public void setRow(int x, int newValue){
        if (isValid(x,0)){
            //for(int i: array[x]){
            //    array[x][i] = newValue;
            //}
            for(int i = 0; i < array[x].length; i++){
                array[x][i] = newValue;
            }
        }
    }

第二个for循环工作,第一个没有做任何事情。我错过了什么?

1 个答案:

答案 0 :(得分:0)

当您键入for(int i: array[x])时,i不是数组的索引:它是数组中元素的引用。它将更改为下一个元素,直到它到达数组的末尾。您的分配应该在逻辑上为i = newValue(但不会有效,继续阅读)。

举个例子:假设你有一个数组singleArray = { 4, 2, 1, 4}

撰写for (int i : singleArray) sysout(i);会将您作为输出4214。这就是你的第一个for循环不起作用的原因。

但是,为什么i = newValue在这种情况下不会起作用?这是因为i实际上只是数组中值的连续副本。如果它是一个对象,i将成为您对象的引用:调用i.setValue(newValue)将会正常工作。

注意:请注意i = newValue不起作用,与我之前所说的相反:您只需覆盖您的参考。