所以,我必须以Nim的风格制作一个Java游戏....我已经成功完成了大部分工作......我只是有几个问题我很困惑:
问题1:程序执行正常,甚至运行一次,但经过一次代码后,程序退出...我需要帮助看看它为什么这样做(我使用了错误的循环吗?)
问题2:为什么程序总是选择计算机进入所谓的“智能模式”?
任何帮助将不胜感激。谢谢你们:D
这是我的代码:
import java.util.*;
public class GameOfNim
{
public static void main (String [] args)
{
Scanner in = new Scanner (System.in);
Random num = new Random ();
int numberLeft = num.nextInt(101-10) + 10;
int computerMode = num.nextInt(1);
int subtraction = numberLeft;
boolean turn = num.nextBoolean();
System.out.println ("The number you start out with is: " + numberLeft);
if (computerMode == 0)
{
System.out.println ("The computer is in smart mode");
}
if (computerMode == 1)
{
System.out.println ("The computer is in dumb mode");
}
while (numberLeft > 1)
{
if (turn == true)
{
System.out.println ("It is your turn...");
System.out.printf ("Please enter the number you wish to take from the pile (Remember it has to be less than " + numberLeft/2 + "): ");
subtraction = in.nextInt();
numberLeft -=subtraction;
System.out.println ("The number left is " + numberLeft);
turn = false;
}
if (turn ==false)
{
System.out.println ("It is the computer's turn...");
if (computerMode == 0)
{
numberLeft = smartComputer(numberLeft);
System.out.println ("The number left is " + numberLeft);
}
if (computerMode == 1)
{
numberLeft -= num.nextInt(numberLeft/2);
System.out.println ("The number left is " + numberLeft);
}
turn = true;
return;
}
}
if (numberLeft <= 1)
{
if (turn = false)
{
System.out.println ("You Win!");
}
else
{
System.out.println ("You're horrible...you lost to a computer.");
}
}
}
public static int smartComputer (int num)
{
int power = 2;
while (power < num)
{
power *=2;
}
power /= 2;
num = power-1;
return num;
}
}
答案 0 :(得分:3)
Random.nextInt(int n)将返回介于0和n之间的int值。因为你计算了computerMode:
int computerMode = num.nextInt(1);
computerMode将始终返回0.
如果计算机只有两种模式,你可以使用nextBoolean吗?
答案 1 :(得分:2)
来自随机的documentation:
返回伪随机,均匀分布的int值介于0(包括)和指定值(不包括)之间。
“独占”表示nextInt(n)
将返回一个可能为n-1
但不为n
的整数。 nextInt(n)
有n
种可能的结果,包括0。
简单的解决方法是使它nextInt(2)
,因为有两种可能的模式。
答案 2 :(得分:2)
既然你已经表明你已经解决了第一个问题,我会回答第二个问题。
这一行:
Int computerMode = num.nextInt(1)
应该是:
Int computerMode = num.nextInt(2)
或许类似
Boolean computerMode = num.nextBoolean()
根据Random#nextInt
的文档:
返回一个伪随机,均匀分布的int值,介于0(含)和指定值(不包括)之外......
因此,由于您传入了值1,因此唯一可以返回的值是0.我建议使用nextBoolean
方法,因为它看起来像是在使用{{ 1}}方法无论如何都要生成类似布尔值。