在我的代码中,我有变量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);
它应该起作用!