无法找到java.lang.ArrayIndexOutOfBoundsException的原因

时间:2016-06-19 05:42:14

标签: java arrays indexoutofboundsexception

我正在尝试运行以下程序,

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)

我知道当我们尝试访问超出范围的数组元素时会发生此错误。但这似乎没有效果。

我编辑了输出。

2 个答案:

答案 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个索引。