2010-11-01 82 views
3

这是我的错误信息:异常在线程 “主” java.lang.IllegalArgumentException异常:n必须是正

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

您的帖子中没有任何问题。 – 2010-11-01 20:00:52

回答

5

在第一次调用top为零,所以random.nextInt(top)会引发异常。这个方法只能用正数来调用。

+0

private int top = 1; 我将初始值赋值为1.现在看起来工作正常。 – chief 2010-11-01 20:12:03

0

您使用

​​

top

已经被分配了一个有意义的值(从默认值0分开;随机抛出一个异常,因为它需要一个正值)。

+0

这是不正确的。未定义时,整数为'0'。 – thejh 2010-11-01 20:06:35

+0

@thejh:'0'是未初始化时的默认值,是(编辑一点以进一步阐明)。 – ChristopheD 2010-11-01 20:07:46

+0

即使没有澄清,这是不正确的。也许不完整... – MForster 2010-11-01 21:41:29

2

当你调用:random.nextInt(top)在行:44,你就是传递0(对于这就是“顶”变量的值)

你要通过什么> 0

这是什么:“ n必须是正数“的意思。

相关问题