我正在尝试运行以下程序,
public class Ocerloading {
public static void main(String[] args) {
int[] month_days = new int[12];
String[] month_name = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" };
for (int i = 0; i < 12; i++) {
if (i == 1) {
month_days[i] = 28;
continue ;
}
if (i <= 6) {
if (i % 2 == 0)
month_days[i] = 31;
else
month_days[i] = 30;
} else {
if (i % 2 == 0)
month_days[i] = 30;
else
month_days[i] = 31;
}
}
for (int x : month_days) {
System.out.println(month_days[x]);
}
}
}
它给出了以下错误,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 31
at Ocerloading.main(Ocerloading.java:32)
我知道当我们尝试访问超出范围的数组元素时会发生此错误。但这似乎没有效果。
我编辑了输出。
答案 0 :(得分:2)
你误解了增强的for循环。它遍历数组的元素,而不是它们的索引。
应该是:
for (int x : month_days) {
System.out.println(x);
}
答案 1 :(得分:0)
Java 5中引入的enhanced for
loop为您提供了数组的元素。您希望它能像传统的for
循环一样提供索引。
e.g。
for (int i = 0; i < month_days.length; i++) {
System.out.println(month_days[i]);
}
以上将有效,因为我们正在接受指数。
在您的情况下,请进行以下更改:
for (int x : month_days) {
System.out.println(x);
}
这是因为x
不是数组索引,而是x
是存储在month_days
数组中的实际值。因此,当它试图找到month_days[12]
时,它会失败,因为month_days
的大小为12,因此有0-11个索引。