【问题标题】:Java ArrayIndexOutOfBoundsJava ArrayIndexOutOfBounds
【发布时间】:2015-06-02 15:50:24
【问题描述】:

目前正在做一个学生项目。我想找出最大的数字并通过冒泡排序对其进行排序,该数字是从 JLabel 解析的,但我每次都会收到此错误。这是一个代码sn-p:

    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;
            }

        }
    }

【问题讨论】:

    标签: java exception indexoutofboundsexception


    【解决方案1】:
    for(int i=0; i<=zahlen.length; i++)
    

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

    改成

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

    有趣的是,您的其他循环避免了这个陷阱,尽管稍后您仍然需要小心j+1。确保这永远不会 >= zahlen.length

    您可以简单地用 1 而不是 0 初始化 j,然后用 j-1j+1 替换所有出现的 jj

    【讨论】:

    • 正如@GriffeyDog 指出的那样,您需要注意另一个循环中的j+1。您必须确保它永远不会 >= zahlen.length
    【解决方案2】:

    将 for 循环中的“i

    记住数组的索引为 0,因此您尝试使用当前使用的“

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

    【讨论】:

      【解决方案3】:

      当代码尝试访问不存在的数组元素时,会出现 ArrayIndexOutOfBounds 异常。在您的代码中,由于您要额外循环一次for(int i=0; i&lt;=zahlen.length; i++),因此您会遇到此异常。保持 FOR 循环为for(int i=0; i&lt;zahlen.length; i++)

      您不仅要检查zahlen[i],还要检查w[i],因为您循环的长度为zahlen,而且w 的长度可能比zahlen 短。

      【讨论】:

        猜你喜欢
        • 2011-05-01
        • 2014-01-02
        • 1970-01-01
        • 2013-07-04
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        相关资源
        最近更新 更多