问题描述
我编写了一个代码,应该使用 Java 中的 for-each 循环从数组中打印奇数和偶数,但不幸的是它显示了
"Exception in thread "main" java.lang.Arrayindexoutofboundsexception: 22"
即使在编译器中打印了一些答案,也不是它应有的样子。 如:输出将是这样的:
Even numbers in the Array are:
10
6
4
2
.
.
但它显示如下:
Even numbers in the Array are:
10
14
4
Exception in thread "main" java.lang.Arrayindexoutofboundsexception: 22
有人可以帮忙吗?
这是我的代码供您参考。
public class Main {
public static void main(String[] args) {
int[] num = {1,3,9,10,6,5,4,2,22,14,15,7,8};
System.out.println("Even numbers in the Array are:");
for (int i : num) {
if (num[i] % 2 == 0) {
System.out.println(num[i]);
}
}
System.out.println("The Odd numbers in the Array are:");
for (int i : num) {
if (num[i] % 2 != 0) {
System.out.println(num[i]);
}
}
}
}
解决方法
for(int i : num)
这里的“i”不是数组的索引,这正是元素, 所以你不需要以这种方式获取值
num[i]
这样引用就够了
i
所以在这种情况下最好不要使用变量名“i”,但是
for (number: numbers)
例如代替
,我写了一个应该打印奇数和偶数的代码 从使用 Java 中的 for-each 循环的 Array 中提取,但不幸的是它显示了
“线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException: 22"。
那是因为您使用数组的元素作为数组的索引本身。它在 22 处失败,因为它是数组中第一个大于数组大小的值。
你有基于索引的循环
for(int i=0; i<num.length; i++){
if( num[i]%2 ==0) {
System.out.println(num[i]);
}
}
并且您拥有(除其他外)增强的 for 循环,允许您直接迭代(例如)数组的内容,而无需显式指定索引。
for-each 循环语法
The syntax of the Java for-each loop is:
for(dataType item : array) {
...
}
这里,
array - 一个数组或一个集合
item - 数组/集合的每一项都分配给这个变量 dataType
数据类型 - 数组/集合数组/集合
这样可以使代码更简洁,也更不容易出错:
for(int n : num) {
if(n%2 == 0) {
System.out.println(n);
}
}
这个循环非常有用,因为很多时候除了访问数组中的元素外,人们还想遍历数组的所有元素而无需真正关心索引。