为什么我的变量值永远不会改变



在我的代码中,我有变量randomNumber,它应该更改,但永远不会。为什么?

import java.util.Random;
import  java.util.Scanner;
public class NimGame
{
    public static void main(String[] args) 
    {  
        Random myRandom = new Random();
        int playerCount = 1;
        int stonesRemoved = 0;
        int randomNumber;
        randomNumber = myRandom.nextInt(15) + 16; // Selects a random number between 15-30 as the number of stones.
        System.out.println("You will be playing with: " + randomNumber + " stones.");
        System.out.println("Each player can take 1, 2 or 3 stones when it is your turn.");
        System.out.println("Player who takes the last stone looses.");
        System.out.println();
        Scanner input = new Scanner(System.in);
         while (true)
         {
            StoneRemover (randomNumber, playerCount);
           randomNumber = randomNumber - stonesRemoved;
           System.out.println("There are now: " + randomNumber + " stones");
          if (randomNumber == 0)
          {
            if (playerCount == 1)
            {
              System.out.println("Player 1 lost!");
            }
            else
            {
              System.out.println("Player 2 lost!");
            }
            break;
          }
          playerCount ++;
          if (playerCount > 2)
           {
             playerCount = 1;
           }
         }
         input.close();
    }
   public static int StoneRemover (int stonesRemoved, int playerCount)
   {
       Scanner input = new Scanner(System.in);
       while (true)
       {      
          System.out.print("How many stones does player " + playerCount + " want to take? ");
          stonesRemoved = input.nextInt(); 
         if (stonesRemoved > 3 || stonesRemoved == 0)
          {
            System.out.println("You did not select a correct number of stones to remove.");
            System.out.println("Try Again!!");
          }
         else 
          {
            break;
          }
       } 
       return stonesRemoved;
   }
}
      //Every time I run the code, the randomNumber does not update to the new number after the user retrieves 1,2, or 3 stones. Why is this happening

您不使用stonesRemoved函数返回的值:

stonesRemoved = StoneRemover(randomNumber, playerCount);

,也可以做:

randomNumber -= StoneRemover(randomNumber, playerCount);

程序不起作用,因为您根本没有更改变量stonesRemoved。它保持0,总是!

"但是不!我在StoneRemover方法中更改了它!不是吗?"您可能会问。

好吧,您在这里做了什么:

stonesRemoved = input.nextInt();

不是更改您在主方法中使用的stoneRemoved变量。:

randomNumber = randomNumber - stonesRemoved; // <-- not this one!

这是因为您传递了 value ,而不是将stonesRemoved引用到该方法中,因此在StoneRemover方法中更改它对主方法中的stonesRemoved变量没有影响。您可以做的是:

更改此行:

StoneRemover (randomNumber, playerCount);

stonesRemoved = StoneRemover (randomNumber, playerCount);

它应该起作用!

最新更新