【发布时间】:2016-06-19 05:42:14
【问题描述】:
我正在尝试运行以下程序,
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)
我了解当我们尝试访问超出范围的数组元素时会发生此错误。但这似乎无效。
我编辑了输出。
【问题讨论】:
-
Eran 的回答是正确的。您可以很容易地发现这一点,方法是使用调试器单步执行您的代码并在异常之前以
x的值为例。使用调试器是程序员的一项关键技能,而不是考虑以后学习的东西。一旦您设法编写了可编译的代码,就该开始学习如何使用调试器单步执行该代码了。 -
@Stewart,如前所述,它提到了 EnhancedForLoop,因此很可能是
for (int x : month_days) { ... -
@T.J.Crowder 我认为
month_days是用于存储索引的int[]。如果您阅读代码,这显然是意图... -
@Stewart,并非如此,它发生在增强的 for 循环中,因为代码将其视为索引,而它们是实际值。
-
那些因为它看起来太初级而对主要 OP 的问题投反对票的人,请不要。人们必须从某个地方开始,我们 SO 在那里为他们提供支持。 OP提供了清晰的代码,问题也很重要。他是初学者,让我们帮助他,不要气馁在这里提问。谢谢。
标签: java arrays indexoutofboundsexception