首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >再犯尼姆游戏中的错误

再犯尼姆游戏中的错误
EN

Stack Overflow用户
提问于 2013-12-03 00:20:46
回答 2查看 172关注 0票数 1

我不确定我是否应该为this...but创建一个新的问题,现在出现了一个新的问题。当计算机在所谓的“智能模式”中运行时,程序运行得很好,但是当程序以“愚蠢模式”运行时会出现错误

每当我接近赢得这场游戏(Snickerdoodles,我刚刚输掉了游戏)时,当计算机处于“愚蠢的mode...the错误”时,我总是会收到一个错误:

java.lang.IllegalArgumentException: n必须在java.util.Random.nextInt(Random.java:294)在GameOfNim.main(GameOfNim.java:62)呈阳性

我理解在这个实例中,n必须是肯定的,但是我甚至有一个if语句,它告诉代码如果实际发生这种情况应该做什么.

你们有什么解决办法吗?

哦,这里又是代码(我不包括智能模式方法,因为这与它无关):

代码语言:javascript
复制
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(2);
        int subtraction = numberLeft;
        boolean turn = num.nextBoolean();
        String computer = "";

        System.out.println ("The number you start out with is: " + numberLeft);
        System.out.println ("-------------------");

        if (computerMode == 0)
        {
            System.out.println ("The computer is in smart mode");
            System.out.println ("-------------------");
            computer = "Smart";
        }
        if (computerMode == 1)
        {
            System.out.println ("The computer is in dumb mode");
            System.out.println ("-------------------");
            computer = "Dumb";
        }

        while (numberLeft > 1)
        {
            if (turn == true)
            {
                System.out.println ("-------------------");
                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) +1) + "): ");
                subtraction = in.nextInt();
                numberLeft -=subtraction;
                System.out.println ("The number left is " + numberLeft);
                turn = false;

            }
            if (turn ==false)
            {
                System.out.println ("-------------------");
                System.out.println ("It is the computer's turn...");
                if (computer.equals("Smart"))
                {
                    numberLeft = smartComputer(numberLeft);
                    System.out.println ("The number left is " + numberLeft);

                }

                if (computer.equals("Dumb"))
                {
                    if (numberLeft - num.nextInt(numberLeft/2) <= 1)
                    {
                        return;
                    }
                    else
                    {
                        numberLeft -= (num.nextInt(numberLeft/2 - 1) + 1);
                    }
                    System.out.println ("The number left is " + numberLeft);
                }
                turn = true;
            }
        }

        if (numberLeft <= 1)
        {
            if (turn = false)
            {
                System.out.println ("~~~~~~~~~~~~~~~~~~~~~~~~");
                System.out.println ("You Win!");
            }
            else
            {
                System.out.println ("~~~~~~~~~~~~~~~~~~~~~~~~");
                System.out.println ("You're horrible...you lost to a computer.");
            }
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2013-12-03 00:25:25

代码语言:javascript
复制
if (numberLeft <= 1)
    {
        if (turn = false)
        {
            System.out.println ("~~~~~~~~~~~~~~~~~~~~~~~~");
            System.out.println ("You Win!");
        }
    }

您在这里有一个任务,而不是一个等式检查。虽然我不认为这是整个问题的原因

票数 0
EN

Stack Overflow用户

发布于 2013-12-03 00:32:50

这部分代码看上去很粗略。

代码语言:javascript
复制
if (turn == true)
            {
                System.out.println ("-------------------");
                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) +1) + "): ");
                subtraction = in.nextInt();
                numberLeft -=subtraction;
                System.out.println ("The number left is " + numberLeft);
                turn = false;

            }
            if (turn ==false)
            {
               ...

在当轮到播放器时处理的代码块中,您将更改numberLeft的值,并设置turn=false。这意味着测试turn==false将为真,并将输入计算机程序生成随机整数的代码块。

您可以尝试这样做:

代码语言:javascript
复制
else if (turn == false)
{
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20340516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档