Java ArrayIndexOutOfBound

Java ArrayIndexOutOfBound

我目前正在做一个学生项目,每次我都会收到这个错误:ArrayIndexOutOfBoundsException: 7。有人可以看到它发生在哪里以及我如何解决它吗?我知道代码看起来很乱,但它只适合我。数组大小为7.

public void actionPerformed(ActionEvent e) {
    if(c >= Playerlist.length) {
        if(c >= wuerfelsummen.length) {
            c = 0;
        }
    }

    if(wuerfelsummen[c] == null) {
        c++;
    }

    wuerfelsummen[c].setText(lbl_summe.getText());
    pot.setCurrentPlayer(Playerlist[c]);

    if(c >= Playerlist.length) {
        c = 0;
    } else {
        c++;

        //ARRAY_INDEX_OUT_OF_BOUNDS ERROR !!!!!!!!!!!!!!!!!!!!
        while(wuerfelsummen[c] == null) {
            if( c <= Playerlist.length) {
                c++;
            } else {
                c = 0;
            }
        }
    }
}

现在试试,你比较不好,在循环中:

   public void actionPerformed(ActionEvent e) {
        if(c >= Playerlist.length)
        {
            if(c >= wuerfelsummen.length)
            {
                c = 0;
            }
        }
        System.out.println(c);
        if(wuerfelsummen[c] == null)
        {
            c++;
        }

        System.out.println(c);


        wuerfelsummen[c].setText(lbl_summe.getText());
        lbl_summe.setText("0");
        lbl_summe.setForeground(Color.black);
        btnWerfeln.setEnabled(true);
        pot.setCurrentPlayer(Playerlist[c]);
        if(c >= Playerlist.length)
        {
            c = 0;
        }
        else
        {
            c++;

            //ARRAY_INDEX_OUT_OF_BOUNDS ERROR !!!!!!!!!!!!!!!!!!!!
            while(wuerfelsummen[c] == null)
            {
                if( c < Playerlist.length-1)
                {
                    c++;
                }
                else
                {
                    c = 0;
                    //ermittleGewinner(wuerfelsummen);
                }

            }
        }
        System.out.println(c);
        //ermittleGewinner(wuerfelsummen);



    }
});

目前您正在递增数组末尾的索引,导致程序超出数组范围。因此你应该改变...

if(c <= Playerlist.length)
{
    c++;
}

...到...

if(c < Playerlist.length)
{
    c++;
}
if(c >= Playerlist.length)
        {
            c = 0;
        }
        else
        {
            c++;

            //ARRAY_INDEX_OUT_OF_BOUNDS ERROR !!!!!!!!!!!!!!!!!!!!
            while(wuerfelsummen[c] == null)

您首先检查 c 是否至多是数组的最后一个索引,然后 然后 将其递增 1,可能会超过该限制。

这个字符串有问题

if( c <= Playerlist.length) {

c = Playerlist.length

您将遇到 ARRAY_INDEX_OUT_OF_BOUNDS 错误