每当位置到达特定点时,此代码都会不断抛出ArrayOutBoundsException 40
。有时程序运行正常。
//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
最佳答案
问题是您在访问阵列后正在执行安全检查,这使它们一文不值。要解决此问题,您需要将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