2012-01-23 45 views
1

我有一个布尔阵列的Java for each循环迭代布尔数组

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

和我想要翻转(真亦假,假到真)值与“换每个”像这样的语句:

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

但它只是在本地范围内更改x变量。

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

+0

你试过把你的变量放在列表中吗?实际上你究竟想要什么? – Chintan

回答

9

不,这不是正确的做法。增强的for循环不会让您更改正在迭代的值。反转数组,你想使用一个普通的for循环:

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

(请注意,增强的for循环将让你改变了对象的任何数组元素的简称,如果他们类 - 但这与改变元素本身的值不同)

+0

我们不允许改变我们正在迭代的值,但为什么会这样呢?如果我们被允许这样做,会有什么后果 –

1

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

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

增强型for循环创建一个新变量x并每次都在本地设置值,因为布尔值是一个基元,因此不会通过参考。为此,您将需要使用旧的for循环。

1

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

2

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

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

由于预增加“++ i”,元素“test [0]”不会保持不变吗? – Teneff

+0

否。每次执行循环后,都会计算增量表达式。因此,循环的第一次执行将被分配值0。 –

1

没有意外,这是行不通的。毕竟你正在操作一个局部变量,而不是一个对象而不是一个引用。使用正常的循环并修改相应的位置。