“线程中的异常”;“主要”;java.lang.IllegalArgumentException:n必须为正

“线程中的异常”;“主要”;java.lang.IllegalArgumentException:n必须为正,java,Java,以下是我的错误消息: Exception in thread "main" java.lang.IllegalArgumentException: n must be positive at java.util.Random.nextInt(Random.java:265) at Game.generateSecretNumber(Game.java:44) at Game.start(Game.java:32) at Game.main(Game.java:18

以下是我的错误消息:

Exception in thread "main" java.lang.IllegalArgumentException: n must be positive

   at java.util.Random.nextInt(Random.java:265)

   at Game.generateSecretNumber(Game.java:44)

   at Game.start(Game.java:32)

   at Game.main(Game.java:18
我的代码是:

import java.util.Random;
import java.util.Scanner;

public class Game {
private final int LOWER_BOUND = 1;

private int secretNumber;
private int top;

private static enum Response {YES, NO}
private Random random;

private Scanner scanner;

public static void main(String[] args) {
    Game GuessingGame = new Game();
    GuessingGame.start();
} 
    public Game() {
        random = new Random( );
        scanner = new Scanner(System.in);

    }
     public void start() {

         Response answer;

         answer = Response.YES;

         while (answer == Response.YES) { 
             generateSecretNumber();
             playGame();
             answer = prompt("");

         }

      System.out.println("Bye!"); 

}


     private void generateSecretNumber() {
         secretNumber = random.nextInt(top) + 1;
         System.out.println("You are going to guess a number between 1 and what   number? ");
         top = scanner.nextInt();
         System.out.println("Type a number between 1 and: " + top);
     }

     private void playGame() {
         int guessCount = 0;
         int guess;


         do {

         guess = getNextGuess();
         guessCount++;

           if (guess < secretNumber) {
        System.out.println("Too low.  Try again:");

           }
           else if 
              (guess > secretNumber) {
    System.out.println("Too high.  Try again:");
           }
         }
         while ( guess != secretNumber );
     if ( guess == secretNumber ) {
           System.out.println("Right! It took you " + guessCount + " tries");
     }
     else {
         System.out.println("game over");
     }
     }
     private Response prompt(String question) {

         String input;

         Response response = Response.NO;

         System.out.print(question + "Would you like to play again? ");

         input = scanner.next();

         if (input.equals("Y") || input.equals("y")) {
             response = Response.YES;
         }
         return response;
     }

     private int getNextGuess() {
         int input;

         while(true) {
             System.out.print(" ");
             input = scanner.nextInt();

             if (LOWER_BOUND <= input && input <= top) {
                 return input;
             }
             System.out.println("Invalid input: " + "must be between " + LOWER_BOUND + " and" + top);
         }
     }
   }
import java.util.Random;
导入java.util.Scanner;
公开课游戏{
私有最终整数下界=1;
私密密文编号;
私人int top;
私有静态枚举响应{YES,NO}
私有随机;
私人扫描仪;
公共静态void main(字符串[]args){
游戏猜测游戏=新游戏();
猜游戏。开始();
} 
公共游戏(){
random=新的random();
扫描仪=新扫描仪(System.in);
}
公开作废开始(){
回答;
回答=回答。是;
while(answer==Response.YES){
generateScretNumber();
游戏();
回答=提示(“”);
}
System.out.println(“再见!”);
}
私有void generateScretnumber(){
secretNumber=random.nextInt(顶部)+1;
System.out.println(“您要猜一个介于1和什么数字之间的数字?”);
top=scanner.nextInt();
System.out.println(“键入一个介于1和:“+top”之间的数字);
}
私人游戏{
int猜测计数=0;
智力猜测;
做{
guess=getNextGuess();
猜数++;
如果(猜测秘密数字){
System.out.println(“太高,请重试:”);
}
}
while(猜测!=秘密数字);
如果(猜测==秘密数字){
System.out.println(“对!你用了”+猜数+“尝试”);
}
否则{
System.out.println(“游戏结束”);
}
}
私人响应提示(字符串问题){
字符串输入;
Response=Response.NO;
System.out.print(问题+“您想再次播放吗?”);
输入=scanner.next();
if(input.equals(“Y”)| input.equals(“Y”)){
response=response.YES;
}
返回响应;
}
private int getNextGuess(){
int输入;
while(true){
系统输出打印(“”);
输入=scanner.nextInt();

如果第一次调用
top
时的(下限为零,则
random.nextInt(top)
抛出异常。此方法只能用正数调用。

使用

secretNumber=random.nextInt(顶部)+1;


top
被指定一个有意义的值之前(除了默认的
0
值;由于它需要一个正值,所以随机抛出一个异常)。

当您调用时:
random。第44行的nextInt(top)
传递0(因为这是“top”变量的值)

您必须传递大于0的内容


这就是“n必须是正的”的意思。

在你的帖子中没有问题。@thejh:
0
是未初始化时的默认值,是的(编辑了一点以进一步澄清)。private int top=1;我将初始值指定为1。现在似乎工作正常。