我正在尝试创建一个“秘密”数字查找器而不使用从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;
}
}
}
答案 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