Java ArrayIndexOutOfBounds

时间:2015-06-02 15:50:25

标签: java exception indexoutofboundsexception

目前正在开展学生项目。我想找出最高的数字并按冒号排序,这个数字是从JLabel解析的,但我每次都会收到这个错误。这是一段代码:

    JLabel[] wuerfelsummen = new JLabel[7];
    wuerfelsummen[0] = player1_wuerfelsumme;
    wuerfelsummen[1] = player2_wuerfelsumme;
    wuerfelsummen[2] = player3_wuerfelsumme;
    wuerfelsummen[3] = player4_wuerfelsumme;
    wuerfelsummen[4] = player5_wuerfelsumme;
    wuerfelsummen[5] = player6_wuerfelsumme;

public int ermittleGewinner(JLabel[] w)
{
    int temp;
    int[] zahlen = new int[w.length];
    for(int i=0; i<=zahlen.length; i++)
    {
        if(w[i].getText() == null)
        {
            zahlen[i] = 99999999;
        }
        else
        {
            zahlen[i] = Integer.parseInt(w[i].getText());
        }
    }

    for(int i=1; i<zahlen.length; i++) 
    {
        for(int j=0; j<zahlen.length-i; j++) 
        {
            if(zahlen[j]>zahlen[j+1]) 
            {
                temp=zahlen[j];
                zahlen[j]=zahlen[j+1];
                zahlen[j+1]=temp;
            }

        }
    }

3 个答案:

答案 0 :(得分:3)

for(int i=0; i<=zahlen.length; i++)

这是不正确的,因为数组是0索引的,这意味着它们从0到长度为1。

将其更改为

for(int i=0; i<zahlen.length; i++)

有趣的是,你的其他循环避免了这个陷阱,尽管你以后仍需要小心j+1。确保这绝不会是&gt; = zahlen.length

您只需使用1而不是0初始化j,然后将所有j的{​​{1}}和j-1替换为j+1

答案 1 :(得分:0)

将for循环中的“i&lt; = zahlen.length”更改为“i&lt; zahlen.length”。

记住数组是0索引的,因此您尝试使用当前使用的“&lt; =”方法访问元素之外的一个索引,而不是数组的大小。

第二个循环应该从i = 0而不是i = 1开始。通过使用i = 1,您将再次尝试访问超过数组大小的一个元素

答案 2 :(得分:0)

ArrayIndexOutOfBounds expcetion在代码尝试访问不存在的数组元素时出现。在您的代码中,由于您要循环一个额外的时间for(int i=0; i<=zahlen.length; i++),因此您将获得此异常。保持FOR循环为for(int i=0; i<zahlen.length; i++)

您不仅要检查zahlen[i],还要检查w[i],因为您正在循环zahlen的长度,而w的长度可能会更短然后zahlen