java - 随机数查找器,生成 - n 必须为正数。有时

标签 java

<分区>

我试图在不使用从 1 数到 10 的循环的情况下创建一个“ secret ”数字查找器。 现在我要尝试的是随机抽取 10 个数字,如果它们高于 secret 数字(在本例中为数字 5),则循环将只查找 5 – 10 之间的数字,或者如果它低于 0-5。

有时函数会给我一个输出,看起来像这样 更高:0 下 : 8 然后报错

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
    at java.util.Random.nextInt(Unknown Source)
    at test1.testvoid$TestVoidMethod.main(testvoid.java:31)

否则 我可以得到输出

Higher : 1
The secret number is: 3

没有错误。

据我所知。 我知道这是一个问题,但很难指出问题出在哪里。

import java.util.Random;
    public class testvoid {
        public static class TestVoidMethod {
            static int secretNumber = 3;
            public static void main(String[] args) {

                Random randomGenerator = new Random();
                String result = "";

                int[] myIntArray = new int[10];
                int i = 0;
                int lastGuess = 0;

                result = checkWhichNumberThisIs(0);

                 while (!result.equals("Equal")) 
                  {
                    if(result.equals("Higher"))
                    { 
        int randomInt = randomGenerator.nextInt(10 - (lastGuess - 1)) + lastGuess;
                        lastGuess = randomInt;
                        result = checkWhichNumberThisIs(randomInt);
                    }
                        else if(result.equals("Lower"))
                    {
                        int randomInt = randomGenerator.nextInt(lastGuess);

                        lastGuess = randomInt;
                            if(myIntArray.equals(randomInt)){
                        result = checkWhichNumberThisIs(randomInt);
                        }
                    }

                    myIntArray[i] = lastGuess;
                    i++;
                }
            }

            public static String checkWhichNumberThisIs(int numberGuess) {

                String result = "";

                if (secretNumber < numberGuess) {
                    result = "Lower";

                     System.out.println("Lower " + numberGuess);
                  }
                  else if (secretNumber > numberGuess) {
                    result = "Higher";
                     System.out.println("Higher " + numberGuess);

                  }
                  else if (secretNumber == numberGuess) {
                    result = "Equal";
                     System.out.println("The secret number is: " + numberGuess);
                  }

                return result;

               }
            }

    }

最佳答案

正如其他人所说,您的字符串比较有误,但您的异常来自不同的错误。

问题是您调用 nextInt 时带有 0否定参数

来自Random类文档:

Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

鉴于您错误的字符串比较,并且由于 lastGuess 初始化为 0
在第二个循环中 10 - (lastGuess - 1) 可以是 0,如果第一个随机操作导致 10

如果 lastGuess0,则 [10 - (0 - 1)] = 10 - (-1) = 11。这就是您的算法失败的原因。

关于java - 随机数查找器,生成 - n 必须为正数。有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369734/

相关文章:

java - EJB 3.0。为客户端提供接口(interface)

java - log4j 错误 Adempiere 服务器启动

java - AES 仅共享 key (无盐或 IV)

java - 从 Eclipse/Android 开发者工具导出 .apk 时出错

java - 在 java 中捕获 sql 开发人员脚本输出

java - Playframework 从 2.4 迁移到 2.5 : java. lang.IllegalStateException:尝试调用 Materialize()

java - Android listActivity onListItemClick 与 CheckBox

java - mvn 测试 java.lang.OutOfMemoryError : unable to create new native thread

java - 具有tomcat和外部应用程序属性的Spring Boot war项目?

java - 是否可以添加库项目的 JAR 文件并在另一个项目中使用其资源?