简体   繁体   English

线程“main”中的异常java.lang.IllegalArgumentException:n必须为正数

[英]Exception in thread “main” java.lang.IllegalArgumentException: n must be positive

Here is my error message: 这是我的错误消息:

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

My Code is: 我的代码是:

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);
         }
     }
   }

On first invocation top is zero, so random.nextInt(top) throws an exception. 在第一次调用top为零,因此random.nextInt(top)会抛出异常。 This method must only be called with positive numbers. 只能使用正数调用此方法。

When you invoke: random.nextInt(top) at line: 44, youre passing 0 ( for that's the value of the "top" variable ) 当您在第44行调用: random.nextInt(top)时,您传递0(因为这是“top”变量的值)

You have to pass something > 0 你必须传递> 0的东西

That's what the: "n must be positive" means. 这就是: “n必须是积极的”意味着。

You use 你用

secretNumber = random.nextInt(top) + 1;

before top has been assigned a meaningful value (apart from the default 0 value ; random throws an exception since it needs a positive value). top之前分配了一个有意义的值(除了默认的0值;随机抛出异常,因为它需要一个正值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 线程“ main”中的异常java.lang.IllegalArgumentException:绑定必须为正 - Exception in thread “main” java.lang.IllegalArgumentException: bound must be positive 线程“ main”中的异常java.lang.IllegalArgumentException:参数N在StdRandom.uniform(StdRandom.java:119)必须为正 - Exception in thread “main” java.lang.IllegalArgumentException: Parameter N must be positive at StdRandom.uniform(StdRandom.java:119) 线程“ main”中的异常java.lang.IllegalArgumentException:in不能为null - Exception in thread “main” java.lang.IllegalArgumentException: in must not be null java.lang.IllegalArgumentException:n必须为正数Android Studio - java.lang.IllegalArgumentException: n must be positive Android Studio java.lang.IllegalArgumentException:卡组类中n必须为正 - java.lang.IllegalArgumentException: n must be positive in deck class 线程“ main”中的异常java.lang.IllegalArgumentException:无法添加到布局:约束必须为GridBagConstraint - Exception in thread “main” java.lang.IllegalArgumentException: cannot add to layout: constraints must be a GridBagConstraint 线程“main”中的异常 java.lang.IllegalArgumentException:宽度 (0) 和高度 (0) 必须为非零 - Exception in thread "main" java.lang.IllegalArgumentException: Width (0) and height (0) must be non-zero 线程“主”中的异常java.lang.IllegalArgumentException:非法的组件位置 - Exception in thread “main” java.lang.IllegalArgumentException: illegal component position 线程“ main”中的异常java.lang.IllegalArgumentException:image == null - Exception in thread “main” java.lang.IllegalArgumentException: image == null 线程“ main”中的异常java.lang.IllegalArgumentException:将窗口添加到容器 - Exception in thread “main” java.lang.IllegalArgumentException: adding a window to a container
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM