2010-11-01 5 views
3

Voici mon message d'erreur:Exception dans le thread "principal" java.lang.IllegalArgumentException: n doit être positif

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 

Mon code est:

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

Il n'y a pas de question dans votre message. –

Répondre

5

Le premier appel top est égal à zéro, donc random.nextInt(top) lève une exception. Cette méthode ne doit être appelée qu'avec des nombres positifs.

+0

private int top = 1; J'ai attribué la valeur initiale à 1. Cela semble fonctionner correctement maintenant. – chief

0

Vous utilisez

secretNumber = random.nextInt(top) + 1;

avant top a été attribué une valeur significative (à l'exception de la valeur par défaut 0 aléatoire déclenche une exception car elle a besoin d'une valeur positive).

+0

C'est incorrect. Un entier est '0' quand il n'est pas défini. – thejh

+0

@thejh: '0' est la valeur par défaut quand il n'est pas initialisé, oui (édité un peu pour clarifier davantage). – ChristopheD

+0

Même sans la clarification, ce n'était pas incorrect. Peut-être incomplet ... – MForster

2

Lorsque vous appelez: random.nextInt(top) à la ligne 44, vous êtes en passant 0 (pour c'est la valeur de la "top" variable)

Vous devez passer quelque chose> 0

C'est ce que le: " n doit être positif " signifie.

Questions connexes