This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?

(26个答案)


2年前关闭。




我正在尝试制作蛇游戏。我快完成了。问题是,有时当蛇吃掉敌人的物体时,会 pop 此错误--->
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 33

er.java:814)

这是敌人的位置单元--->
private int[] enemyYpos = {25,50,75,100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,550,575,600,625,650,675,700,725,750,775,800,825,850};
private int[] enemyXpos = {100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,550,575,600,625};

这是随机数--->
private int xpos = r.nextInt(34);
private int ypos = r.nextInt(20);

现在我通过一个for循环使用它们来绘制敌人,在其中定义敌人的位置->
 enemy = new ImageIcon("E:\\Netbeans\\old files\\Game\\src\\game\\bug.png");
    if((enemyXpos[xpos] == snakeXlength[0] && enemyYpos[ypos] == snakeYlength[0])){
    lengthsnake++;
    xpos = r.nextInt(34);
    ypos = r.nextInt(20);
    }
    enemy.paintIcon(this, g, enemyXpos[xpos], enemyYpos[ypos]); //The Exception error shows that the mistake is in this line

我希望这些信息足够了。提前致谢! :)

最佳答案

我认为您交换了x元素的数量和y元素的数量。最简单的修复。更改生成器以使用数组的长度而不是幻数。

private int xpos = r.nextInt(enemyXpos.length);
private int ypos = r.nextInt(enemyYpos.length);


xpos = r.nextInt(enemyXpos.length);
ypos = r.nextInt(enemyYpos.length);

07-26 07:08