2015-11-26 90 views
1

只要位置到达某个点,此代码就会一直抛出ArrayOutBoundsException 40。有时程序运行良好。程序不断抛出ArrayIndexOutofBoundException

//method to get player movement around the board 

public static void playerTurn(BoardSquare[] pos) 
     { 

      //variables to hold data 
      int newLoc; 
      int newBal; 
      int newRoll; 


     //instance of player 
     Player player1 = new Player(); 

     //initialize 
     newBal = player1.getBalance(); 
     newLoc = player1.getLocation(); 
     BoardSquare newPos; 


     do{ 

     //user press a key to start the game 
     System.out.println("Press enter"); 
     new Scanner(System.in).nextLine(); 

     //player new roll, location, and balance 
     newRoll = roll(); //roll of the dice 
     newLoc = newLoc + (newRoll - 1); //player position 
     newPos = pos[newLoc]; //info about location 
     newBal = newBal - newPos.getRent(); //player new balance 

     //necessary to keep the game going until player balace is 0 
     if(newLoc > pos.length-1) 
     { 
      newLoc = (pos.length-1) - newLoc;//player new loc if > 39 
     } 
      //prints info on screen 
      System.out.println(newRoll() + " " + newLoc + " " + newBal); 


     }while (newBal > 0);//loop until player balance get to zero 


     }//ends method PlayerTurn 

回答

0

问题是你正在做访问数组后的安全检查,使它们毫无价值。要解决此问题,您需要将if语句从循环结尾移至newLoc = newLoc + (newRoll - 1)newPos = pos[newLoc]之间。在访问数组之前保证newLoc小于数组的长度。具体如下,

do{ 

    //user press a key to start the game 
    System.out.println("Press enter"); 
    new Scanner(System.in).nextLine(); 

    //player new roll, location, and balance 
    newRoll = roll(); //roll of the dice 
    newLoc = newLoc + (newRoll - 1); //player position 

    //necessary to keep the game going until player balace is 0 
    if(newLoc > pos.length-1) 
    { 
     newLoc = (pos.length-1) - newLoc;//player new loc if > 39 
    } 

    newPos = pos[newLoc]; //info about location 
    newBal = newBal - newPos.getRent(); //player new balance 

    //prints info on screen 
    System.out.println(newRoll() + " " + newLoc + " " + newBal); 


    }while (newBal > 0);//loop until player balance get to zero 
0

我假设在错误的行是:

newPos = pos[newLoc]; //info about location 

有可能是你超过POS的数组大小时newLoc被设置到newLoc +卷。这会导致ArrayOutOfBoundsException。

希望这会有所帮助!