我一直在摸着头: 该方法只是在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循环工作,第一个没有做任何事情。我错过了什么?
答案 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
不起作用,与我之前所说的相反:您只需覆盖您的参考。