为什么这两个循环有不同的结果?我以为他们都会将每个数组中的所有值初始化为 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]]
最佳答案
在第一个循环中,您将更改一个永远不会更新数组中内容的局部变量。 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
}
}
关于java - Groovy 中的不同循环行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194593/