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

时间:2014-01-26 21:50:38

标签: java

我正在尝试创建一个“秘密”数字查找器而不使用从1到10的循环。 现在我想要的是随机输出10个数字,如果它们高于秘密数字,在这种情况下,数字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;

               }
            }

    }

2 个答案:

答案 0 :(得分:4)

正如其他人所说的那样,你的字符串比较是错误的,但是你的异常来自另一个错误。

问题在于您使用 0 否定参数致电nextInt

来自Random课程文档:

  

返回一个伪随机数,在0之间均匀分布的int值   (包括)和指定值(不包括),由此得出   随机数发生器的序列。

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

如果lastGuess 0 infact [10 - (0 - 1)] = 10 - (-1) = 11。这就是你的算法失败的原因。

答案 1 :(得分:2)

result != "Equal"更改为!result.equals("Equal")result == "Higher"result.equals("Higher")

当你在非基元上使用==时,它只是比较内存中的地址而不是对象。在java中的字符串中,有时它可以是“智能”并在相同的地址中放置2个相同的字符串,但并非总是如此,因此有时"hello"=="hello"将返回true,有时会返回false