2009-07-12 8 views
-1

Comment puis-je faire cela une fois que l'utilisateur entre un nombre et appuie sur Entrée (ou quelque chose) il exécute les instructions ifelse?Jeu de deviner le nombre - comment y remédier?

public static void main(String[] args) { 

    System.out.println("please guess the number between 1 and 100."); 

    boolean run = true; 
    int y = 0; 

    Random ran = new Random(); 
    int x = ran.nextInt(99); 

    while (run == true) { 

     Scanner scan = new Scanner(System.in).useDelimiter(" "); 
     // System.out.println(scan.nextInt()); 

     y = scan.nextInt(); 

     /* 
     * if(y > 0){ run = false; } else{ run = true; } 
     */ 
     if (y > x) { 
      System.out.println("Lower..."); 
     } else if (y < x) { 
      System.out.println("Higher..."); 
     } else if (y == x) { 
      System.out.println("Correct!"); 
      try { 
       Thread.currentThread().sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 

       System.exit(0); 
      } 
     } 
    } 
} 
+0

Qu'entendez-vous par "exécuter les instructions if-else"? Parlez-vous de ceux qui sont commentés? – jjnguy

+0

Vous devriez utiliser 'Thread.sleep (...)' au lieu de 'Thread.currentThread(). Sleep (...)' car c'est une méthode statique; votre code pourrait vous tenter de faire 'someOtherThread.sleep (...)' qui ne dort pas 'someOtherThread'. – newacct

Répondre

3

Votre code fonctionne tel quel. C'est juste que votre entrée doit être délimitée par des espaces.

Si vous entrez un seul nombre et appuyez sur Entrée, il n'y aura pas d'espace, et comme vous avez défini votre Scanner pour être délimité par des espaces, il ne trouvera rien. D'autre part, si vous entrez:

3 9 

(3 [espace] 9), votre scanner va prendre le 3. Qu'est-ce que vous voulez sans doute est la suivante:

Scanner scan = new Scanner(System.in).useDelimiter("\n"); 

afin que votre Scanner lira un nombre après avoir appuyé sur Entrée. Peu importe la façon dont vous faites cela, vous voudrez mettre une erreur de gestion autour de la Scanner pour gérer InputMismatchException s.

+0

merci pour la réponse! J'oublie que \ n est donc j'ai juste pressé entrer dans le délimiteur et il n'a obtenu que le premier chiffre alors j'ai essayé d'obtenir le # entier à travers des méthodes beaucoup plus compliquées! merci pour la réponse qui a complètement résolu mes problèmes! –

0

Je pense que votre question n'est pas très claire, les modifications suivantes semblent logiques, compte tenu de la structure de votre code:

  else if (y == x) { 
        System.out.println("Correct!"); 
        run = false; 
      } 

et bien sûr tout if(run) (une question de bon style)

0

Votre le code n'a pas réellement généré de nombres compris entre 1 et 100 inclus (plutôt entre 0 et 98 inclus). En corrigeant ce bug et en ajoutant une vérification d'erreur, votre code devient:

import java.util.*; 

public class HiLo { 
    public static void main(String[] args) { 
    int guess = 0, number = new Random().nextInt(100) + 1; 
    Scanner scan = new Scanner(System.in); 

    System.out.println("Please guess the number between 1 and 100."); 

    while (guess != number) { 
     try { 
     if ((guess = Integer.parseInt(scan.nextLine())) != number) { 
      System.out.println(guess < number ? "Higher..." : "Lower..."); 
     } 
     else { 
      System.out.println("Correct!"); 
     } 
     } 
     catch (NumberFormatException e) { 
     System.out.println("Please enter a valid number!"); 
     } 
     catch (NoSuchElementException e) { 
     break; // EOF 
     } 
    } 

    try { 
     Thread.currentThread().sleep(1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
Questions connexes