Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机数查找器,生成的-n必须为正。有时_Java - Fatal编程技术网

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

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

我正在尝试创建一个“秘密”号码查找器,而不使用从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;

               }
            }

    }
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