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 错误
我目前正在做一个学生项目,每次我都会收到这个错误: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 错误