Mat*_*eau 6 java arrays foreach for-loop
在我的程序中,我需要一个for-each循环,它计算给定数组中的均数,并为每个循环增加变量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++;
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 54
Run Code Online (Sandbox Code Playgroud)
if (numbers[i] % 2 == 0) {
Run Code Online (Sandbox Code Playgroud)
在foreach循环内,您无需使用索引进行访问。只要iforeach继续给您element直接使用(而不是索引)所使用的数组/集合内的内容就足够了。
if (i % 2 == 0) {
Run Code Online (Sandbox Code Playgroud)
for (int i : numbers) {
if (i % 2 == 0) {
even++;
}
else{
odd++;
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以通过检查第一个循环中的偶数或奇数来完全消除第二个循环,从而缩短代码长度。
对于您案例中的每个循环,将解释如下:
for (int i : numbers) {
数组中的每个整数都将i逐个放置
所以,你做错了是:
if (numbers[i] % 2 == 0) {
for (int i : numbers) {
if (numbers[i] % 2 == 0) {
even++;
}
else {
odd++;
}
Run Code Online (Sandbox Code Playgroud)
i不会像传统的for循环那样增加evrytime循环,这里i携带实际值
所以你应该改变numbers[i]%2==0为正义i%2==0
for (int i : numbers) {
if (i % 2 == 0) {
even++;
}
else {
odd++;
}
Run Code Online (Sandbox Code Playgroud)