java - Groovy 中的不同循环行为

标签 java loops groovy

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

相关文章:

Java 使用 File for Unix/Windows 创建目录

javascript - 遍历数组并返回所有值的总和

javascript - 变量似乎没有获得新值

groovy - Groovy 中使用 ActiveMQ 的 JMS - 无法解析类 ActiveMQConnectionFactory

jenkins - 使用 Jenkins Pipeline 共享库上的版本

java - 改造 2.0 + GSON + Android : Unable to invoke no-args constructor for interface retrofit2. http.Body

java - 为什么在while循环中等待Condition?

jenkins - 如何将用户输入密码与凭据密码进行比较

java - 无法使用 Netbeans 8 和 JDK 1.8 运行 iReports 5.6.0

php - 计算数据库中两列中具有相同值的行数 - 使用前 5 行的数量设置 5 个不同 div 的宽度