Java为每个循环迭代布尔数组



我有一个布尔数组

boolean[] test = {
    false,
    true,
    true,
    false,
    true
};

我正试图用"for each"语句来翻转(true到false,false到true)值,如下所示:

for(boolean x : test) {
    x = !x;
}

但它只是在局部作用域中更改x变量。

我是Java的新手,我想问一下如何做到这一点,以及这是否是正确的方法。我搜索了很多,但大多数例子都是用来从数组中收集数据而不修改它的

不,这不是正确的方法。增强的for循环不允许您更改正在迭代的内容的值。要反转数组,您需要使用正则for循环:

for (int i = 0; i < test.length; i++) {
    test[i] = !test[i];
}

(请注意,增强的for循环可以让您更改任何数组元素引用的对象,如果它们是类的话,但这与更改元素本身的值不同。)

如果你想影响测试的值,你需要使用一个非增强的for循环:

for (int i = 0; i < test.length; ++i) {
  test[i] = !test[i];
}

不能在for每个循环中更改项。你能用一个正则循环代替吗?

for (int i=0; i < test.length; i++)
{
    test[i] = !test[i];
}

您不需要使用for each,因为for each读取数组的值,并将其存储在局部变量中,正如您所说。您需要迭代数组并直接访问索引。我不会发布任何代码,这样你就可以找到并思考它。

它不起作用不足为奇。毕竟,您正在操作一个局部变量,它不是对象,也不是引用。使用法线进行循环并修改相应的位置。

增强的for循环创建了一个新变量x,每次都在本地设置值,因为boolean是一个基元,因此不通过引用传递。为此,您需要使用旧的For循环。

最新更新