Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java编写游戏时出现IndexOutOfBoundsError_Java_Indexoutofboundsexception - Fatal编程技术网

用Java编写游戏时出现IndexOutOfBoundsError

用Java编写游戏时出现IndexOutOfBoundsError,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我在编写一个学校项目的代码时遇到了IndexOutOfBound错误。此问题不稳定,此问题似乎是随机发生的 public void run(){ // Main game methode Image Background = this.images.get(0);//get background because we can Player Player1 = this.players.get(0);//get player 1 Player Player2 = this

我在编写一个学校项目的代码时遇到了IndexOutOfBound错误。此问题不稳定,此问题似乎是随机发生的

public void run(){ // Main game methode 
    Image Background = this.images.get(0);//get background because we can
    Player Player1 = this.players.get(0);//get player 1
    Player Player2 = this.players.get(1);//get player 2

    Player1.setHorSp(1);//give start speed to player 1
    Player2.setHorSp(1);//give start speed to player 2
    while(this.running == true && this.crash == false){ // main game loop, loops when game is started and there is no crash
        // Player 1
        if(this.turnable == 0 && Player1.getDir() > 0){
            Player1.setPrevLine(Player1.getCurrentLine());//safe previous line for testing
            if(Player1.getDir() == 1){ //check which key and horizontal speed so it can't move in opposite direction
                if(Player1.getHorSp() == -1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX());
                    Player1.setY(Player1.getY()-Player1.getWidth()+Player1.getHeight());
                }
                if(Player1.getHorSp() == 1){
                    Player1.setLineX(Player1.getX()+Player1.getWidth()-grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX()-Player1.getHeight()+Player1.getWidth());
                    Player1.setY(Player1.getY()+Player1.getHeight()-Player1.getWidth());
                }
                Player1.setLineNr(Player1.getLineNr()+1); //tell player that it had turned
                Player1.setImage("BikeBlueUp.png"); //change image in the right direction
                Player1.setWidth(grid); //correct images size
                Player1.setHeight(2*grid);
                Player1.setLineX(Player1.getX()+grid/2);//set point line is atteched to bibe
                Player1.setLineY(Player1.getY()+grid/2);
                Player1.setHorSp(0); //give speed in the right direction
                Player1.setVerSp(-1);
            }
            if(Player1.getDir() == 2){ //check which key and if is in grid
                if(Player1.getVerSp() == -1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX());
                    Player1.setY(Player1.getY());
                }
                if(Player1.getVerSp() == 1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+Player1.getHeight()-grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX());
                    Player1.setY(Player1.getY()+Player1.getHeight()-Player1.getWidth());
                }
                Player1.setLineNr(Player1.getLineNr()+1); //tell player that it had turned
                Player1.setImage("BikeBlueRight.png"); //change image in the right direction
                Player1.setWidth(2*grid); //correct images size
                Player1.setHeight(grid);
                Player1.setLineX(Player1.getX()+Player1.getWidth()-grid/2);//set point line is atteched to bibe
                Player1.setLineY(Player1.getY()+grid/2);
                Player1.setHorSp(1); //give speed in the right direction
                Player1.setVerSp(0);
            }
            if(Player1.getDir() == 3){ //check which key and horizontal speed so it can't move in opposite direction
                if(Player1.getHorSp() == -1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX());
                    Player1.setY(Player1.getY());
                }
                if(Player1.getHorSp() == 1){
                    Player1.setLineX(Player1.getX()+Player1.getWidth()-grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX()-Player1.getHeight()+Player1.getWidth());
                    Player1.setY(Player1.getY());
                }
                Player1.setLineNr(Player1.getLineNr()+1); //tell player that it had turned
                Player1.setImage("BikeBlueDown.png"); //change image in the right direction
                Player1.setWidth(grid); //correct images size
                Player1.setHeight(2*grid);
                Player1.setLineX(Player1.getX()+grid/2);//set point line is atteched to bibe
                Player1.setLineY(Player1.getY()+Player1.getHeight()-grid/2);
                Player1.setHorSp(0); //give speed in the right direction
                Player1.setVerSp(1);
            }
            if(Player1.getDir() == 4){ //check which key and horizontal speed so it can't move in opposite direction
                if(Player1.getVerSp() == -1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX()-Player1.getHeight()+Player1.getWidth());
                    Player1.setY(Player1.getY());
                }
                if(Player1.getVerSp() == 1){
                    Player1.setLineX(Player1.getX()+grid/2); //set end of line
                    Player1.setLineY(Player1.getY()+Player1.getHeight()-grid/2);
                    addLine(Player1.getLineX(),Player1.getLineY(),Player1.getLineX(),Player1.getLineY(),Color.BLUE);//make next line
                    Player1.setCurrentLine(Player1.getLineNr()+Player2.getLineNr());//use next line
                    Player1.setX(Player1.getX()-Player1.getHeight()+Player1.getWidth());
                    Player1.setY(Player1.getY()+Player1.getHeight()-Player1.getWidth());
                }
                Player1.setLineNr(Player1.getLineNr()+1); //tell player that it had turned
                Player1.setImage("BikeBlueLeft.png"); //change image in the right direction
                Player1.setWidth(2*grid); //correct images size
                Player1.setHeight(grid);
                Player1.setLineX(Player1.getX()+grid/2);//set point line is atteched to bibe
                Player1.setLineY(Player1.getY()+grid/2);
                Player1.setHorSp(-1); //give speed in the right direction
                Player1.setVerSp(0);
            }
        }
这将生成错误:

Exception in thread "Thread-5" java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Game.run(Game.java:388)
at java.lang.Thread.run(Thread.java:619)
现在按下up按钮时仍然发生此错误。这一错误在其他2次中都没有发生,然后从现在开始就发生了

此错误是在按下右键后生成的

Exception in thread "Thread-5" java.lang.IndexOutOfBoundsException: Index: 11, Size: 11
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Game.run(Game.java:388)
at java.lang.Thread.run(Thread.java:619)
这个错误是在按下右键后产生的,在同一个游戏中,它在之前的1次中有效。。。即使经过3天的调试,我们仍然看不到用户

以前有没有人见过这种情况?如果有,我们该如何解决

--JYT


另外,整个代码都在这里

我不确定您想做什么,但出现错误的原因是:
Player2.getCurrentLine()
返回
this.lines.size()的值,
因此,您尝试访问列表中不存在的对象(如果列表大小为5,则其对象为0-4)

如果网格是循环的,则可以使用:

Line CurrentLineP2 = this.lines.get(Player2.getCurrentLine() % this.lines.size());
而不是:

Line CurrentLineP2 = this.lines.get(Player2.getCurrentLine());
如果不是循环的,您需要处理此情况。一个玩家怎么可能在一条不存在的线上


在任何情况下,添加所有相关代码都将有助于我们帮助您。

您试图访问仅包含5个元素的数组列表的第6个元素。第388行的内容是什么?它可能正在处理用户输入,因此有时为空。您的代码中的哪一行是第388行?是的,在某个地方出现了一个问题。我在代码中看不到,但根据帖子,我不知道哪一行是#388。请记住,数组的第5个元素位于地址4,而不是地址5。Line CurrentLineP2=this.lines.get(Player2.getCurrentLine());//第388行