Java 随机数查找器,生成的-n必须为正。有时
我正在尝试创建一个“秘密”号码查找器,而不使用从1到10计数的循环。 现在,我尝试随机抽取10个数字,如果它们高于机密数字,在这个例子中,数字5,循环将只查找5-10之间的数字,或者如果它低于0-5 有时,函数会给我一个如下所示的输出 更高:0 下限:8 然后是错误Java 随机数查找器,生成的-n必须为正。有时,java,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(Un
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;
}
}
}
import java.util.Random;
公共类testvoid{
公共静态类TestVoidMethod{
静态整数secretNumber=3;
公共静态void main(字符串[]args){
Random randomGenerator=新的Random();
字符串结果=”;
int[]myIntArray=新int[10];
int i=0;
int lastGuess=0;
结果=检查编号是否为(0);
而(!result.equals(“Equal”))
{
如果(结果等于(“更高”))
{
int randomInt=randomGenerator.nextInt(10-(lastGuess-1))+lastGuess;
lastGuess=randomInt;
结果=检查数字是否为(随机整数);
}
else if(结果等于(“较低”))
{
int randomInt=randomGenerator.nextInt(lastGuess);
lastGuess=randomInt;
if(myIntArray.equals(randomInt)){
结果=检查数字是否为(随机整数);
}
}
myIntArray[i]=最后的猜测;
i++;
}
}
公共静态字符串检查,其编号为(int numberGuess){
字符串结果=”;
if(secretNumbernumberGuess){
结果=“更高”;
System.out.println(“更高”+数值);
}
else if(secretNumber==numberGuess){
结果=“相等”;
System.out.println(“密码为:“+numberGuess”);
}
返回结果;
}
}
}
更改结果!=“等于”
到!结果。等于(“等于”)
和result==“更高”
到result.equals(“更高”)
在非原语上使用=
时,它只比较内存中的地址,而不是对象。在java的字符串中,有时它可以是“智能”的,将两个相同的字符串放在同一个地址中,但并不总是这样,所以有时“hello”==“hello”将返回true,有时返回false更改结果!=“等于”
到!结果。等于(“等于”)
和result==“更高”
到result.equals(“更高”)
在非原语上使用
=
时,它只比较内存中的地址,而不是对象。在java的字符串中,有时它可以是“智能的”,将两个相同的字符串放在同一个地址中,但并不总是这样,因此有时“hello”==“hello”
将返回true,有时返回false正如其他人所说,您的字符串比较是错误的,但您的异常来自不同的错误
问题是您正在使用0或否定参数调用nextInt
从类文档中:
返回0到0之间的伪随机、均匀分布的int值
(包括)和指定值(不包括),从中提取
随机数发生器的序列
由于字符串比较错误,并且由于lastGuess
初始化为0,如果第一次随机操作导致10,则第二个循环10-(lastGuess-1)
中的可能是0
如果
lastGuess
为0实际上[10-(0-1)]=10-(-1)=11
。这就是您的算法失败的原因。正如其他人所说,您的字符串比较错误,但您的异常来自不同的错误
问题是您正在使用0或否定参数调用nextInt
从类文档中:
返回0到0之间的伪随机、均匀分布的int值
(包括)和指定值(不包括),从中提取
随机数发生器的序列
由于字符串比较错误,并且由于lastGuess
初始化为0,如果第一次随机操作导致10,则第二个循环10-(lastGuess-1)
中的可能是0
如果
lastGuess
为0实际上[10-(0-1)]=10-(-1)=11
。这就是算法失败的原因。不要使用==
比较字符串值。使用equals()
。字符串比较人员:虽然您的建议没有问题,但这与问题无关。由于OP仅使用文字==
比较在此处有效。请不要使用==
比较字符串值。使用equals()
。字符串比较人员:虽然您的建议没有问题,但这与问题无关。由于OP仅使用文字==
比较将在这里工作。但例外情况不是“因为这个”。嘿。非常感谢。我只是把所有的==都改成了.e