我有一个布尔数组
boolean[] test = {
false,
true,
true,
false,
true
};
我试图用“for-each”语句翻转(true到false,false为true),如下所示:
for(boolean x : test) {
x = !x;
}
但它只是改变了本地范围内的x
变量。
我是Java的新手,我想问一下如何做到这一点,以及这是否是正确的方法。我搜索了很多,但大多数例子都用于从数组中收集数据而不进行修改。
答案 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循环。