2

为什么这两个循环有不同的结果?我认为他们都会将每个数组中的所有值都初始化为 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]]
4

2 回答 2

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
    }
}
于 2013-08-12T19:05:51.397 回答
1

第一对for循环什么都不做,它是正确的。 num是 inner 范围内的新变量for。它是对表中整数的引用。当您分配它时,它成为对值 5 的引用。表格单元格不会更改。

对于 C 程序员。

int five = 5;
int *num;

这是:

num = &five;

它不是:

*num = five; 
于 2013-08-12T19:06:06.913 回答