在我的程序中,我需要一个for-each循环,它计算给定数组中的evens数,并为每个evens递增变量even。当我使用一个标准的for循环时,比如(i = 0; i < numbers.length; i++;),那么代码就能正常工作。然而,我的赋值要求我对这个特定的问题使用for-each循环。我做错了什么吗?
int [] numbers = new int[8];
int even = 0;
int odd = 0;
for (int i = 0; i < numbers.length; i++) {
numbers[i] = (int)(Math.random() * 51 + 50);
}
for (int i : numbers) {
if (numbers[i] % 2 == 0) {
even++;
}
else
odd++;这会抛出错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 54发布于 2018-02-08 21:39:41
if (numbers[i] % 2 == 0) {在foreach循环中,不需要使用index来访问它。只要i就足够了,因为foreach keep on会在你正在使用的数组/集合中直接给出element (而不是索引)。
if (i % 2 == 0) {for (int i : numbers) {
if (i % 2 == 0) {
even++;
}
else{
odd++;
}
}实际上,你可以通过检查第一个循环中的偶数或奇数来完全消除第二个循环,从而缩短代码。
发布于 2018-02-08 21:44:00
对于您案例中的每个循环,将按如下方式进行解释:
for (int i : numbers) {
数组数字中的每个整数将逐一放入i中
所以,你做错的地方是:
if (numbers[i] % 2 == 0) {
for (int i : numbers) {
if (numbers[i] % 2 == 0) {
even++;
}
else {
odd++;
} i不会像传统的for循环那样增加evrytime循环进行,这里i携带实际值
因此您应该从numbers[i]%2==0更改为只使用i%2==0
for (int i : numbers) {
if (i % 2 == 0) {
even++;
}
else {
odd++;
}发布于 2018-02-08 21:45:41
i是数字本身,而不是索引。所以你应该:
for (int i : numbers) {
if (i % 2 == 0) { // <-- use i not numbers[i]
even++;
}
else {
odd++;
}
}https://stackoverflow.com/questions/48686833
复制相似问题