每当位置到达特定点时,此代码都会不断抛出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

10-08 19:10