gpt4 book ai didi

java - 程序不断抛出 ArrayIndexOutofBoundException

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:20 24 4
gpt4 key购买 nike

只要位置到达某个点,此代码就会不断抛出 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

最佳答案

问题是您在访问数组后进行安全检查,这使得它们毫无值(value)。要解决此问题,您需要将 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

关于java - 程序不断抛出 ArrayIndexOutofBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33930707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com