为什么这两个循环有不同的结果?我认为他们都会将每个数组中的所有值初始化为5,但只有第二个值可以工作。有人可以解释为什么会这样吗?
static main(args)
{
double[][] x = new double[3][3]
double[][] y = new double[3][3]
for(row in x)
{
for(num in row)
{
num=5
}
}
for(int i=0;i<y.size();i++)
{
for(int j=0;j<y[i].size();j++)
{
y[i][j]=5
}
}
println "x: ${x}"
println "y: ${y}"
}
这是输出
x: [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
y: [[5.0, 5.0, 5.0], [5.0, 5.0, 5.0], [5.0, 5.0, 5.0]]
答案 0 :(得分:2)
在第一个循环中,您正在更改一个永远不会更新数组中的内容的局部变量。 num
保存数组元素中的数据副本,但是没有对数组条目的引用,因此更改它对数组没有影响。
这种方式比旧式for循环更有趣:
for (i in 0..x.length - 1) {
for (j in 0..y.length - 1) {
x[i][j] = 5
}
}
或者您可以不使用for
:
(i in 0 .. x.length - 1).each { i ->
(j in 0 .. y.length - 1).each { j ->
x[i][j] = 5
}
}
答案 1 :(得分:1)
第一对for
循环什么都不做,这是正确的。
num
是内部for
范围内的新变量。它是对表中整数的引用。分配时,它将成为对值5的引用。表格单元格不会更改。
对于C程序员。
int five = 5;
int *num;
是:
num = &five;
不是:
*num = five;