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

时间:2012-01-23 13:34:45

标签: java arrays for-loop

我有一个布尔数组

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

我试图用“for-each”语句翻转(true到false,false为true),如下所示:

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

但它只是改变了本地范围内的x变量。

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

6 个答案:

答案 0 :(得分:9)

不,这不是正确的做法。增强的for循环不允许您更改迭代的值。要反转数组,您需要使用常规for循环:

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

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

答案 1 :(得分:2)

如果要影响test的值,则需要使用非增强的for循环:

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

答案 2 :(得分:1)

您无法更改for-each循环中的项目。你可以使用常规循环吗?

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

答案 3 :(得分:1)

对于每个,你不会这样做,因为每个读取数组的值,并将其存储在局部变量中,如你所说。您需要迭代数组并直接访问索引。我不会发布任何代码,因此您可以找到并考虑它。

答案 4 :(得分:1)

毫无意外,它不起作用。你毕竟操纵一个局部变量,它不是一个对象而不是一个引用。使用法线for循环并修改相应的位置。

答案 5 :(得分:0)

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