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

匿名 (未验证) 提交于 2019-12-03 02:03:01

问题:

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 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 

回答1:

On first invocation top is zero, so random.nextInt(top) throws an exception. This method must only be called with positive numbers.



回答2:

When you invoke: random.nextInt(top) at line: 44, youre passing 0 ( for that's the value of the "top" variable )

You have to pass something > 0

That's what the: "n must be positive" means.



回答3:

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).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!