有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Nim游戏再次出现java错误

我不确定我是否应该为这个问题提出一个新的问题。。。但现在出现了一个新问题。 当计算机在所谓的“智能模式”下运行时,程序运行正常,但当程序在“哑模式”下运行时,会出现错误

每当我快要赢得比赛时(Snickerdoodles,我刚刚输掉比赛),当电脑处于哑模式时,我总是会出错。。。错误是这样的:

java.lang.IllegalArgumentException: n must be positive
at java.util.Random.nextInt(Random.java:294)
at GameOfNim.main(GameOfNim.java:62)

我知道在那个例子中n必须是正的,但我甚至有一个if语句,告诉代码如果真的发生了该怎么做

你们有什么解决办法吗

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

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.");
            }
        }
    }

共 (2) 个答案

  1. # 1 楼答案

    if (numberLeft <= 1)
        {
            if (turn = false)
            {
                System.out.println ("~~~~~~~~~~~~~~~~~~~~~~~~");
                System.out.println ("You Win!");
            }
        }
    

    这里有一个作业,而不是平等检查。虽然我不认为这是整个问题的原因

  2. # 2 楼答案

    这段代码看起来很粗略

    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。这意味着testturn==false将是TRUE,并且将输入计算机程序生成随机整数的代码块

    你可以试试这个:

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