2015-10-09 1 views
0

Im nouveau à Java et fais un jeu de devinettes dans lequel l'utilisateur doit deviner un nombre entier aléatoire entre 0 et 50.compteur ne fonctionne pas

J'essaie d'ajouter un compteur de proposition à le jeu qui donne à l'utilisateur jusqu'à 7devine avant "Game over" Cependant, le compteur continue d'aller même au-dessus de 7 malgré ma boucle while.

Je me excuse à l'avance si la question est double, mais je n'ai un bref aperçu et ne pouvait pas trouver une bonne réponse pour mon code

Heres le code:

package guessinggame; 
import java.util.Random; 
import java.util.Scanner; 
public class GuessingGame { 
//Author TC13551 


public static void main(String[] args) { 
    int NumberGuess = 0; 
    Random randomNumber = new Random(); 
    int randomInt = randomNumber.nextInt(51); 
    System.out.println("Guess the number between 0 -50:"); 
    int i = 0; 
    while(i < 8){ 
    do{ 

     Scanner UserGuess = new Scanner(System.in); 
     NumberGuess = UserGuess.nextInt(); 
     if(NumberGuess < 0 || NumberGuess > 50){ 
      System.out.println("Invalid Input, please enter numbers between 0 and 50"); 
     } 
     else if(NumberGuess < randomInt){ 
      System.out.println("Guess is too small."); 
      i ++; 
      System.out. println("You have made "+i +" guesses out of 7"); 
     } 

     else if(NumberGuess > randomInt) { 
      System.out.println("Guess is too big."); 
      i ++; 
      System.out. println("You have made "+i +" guesses out of 7"); 

     } 
      else if(NumberGuess == randomInt){ 
      System.out.println("Correct! You win!"); 
      System.out.println("It took you "+ i + " guesses."); 
      System.exit(0); 
     } 


    }while(randomInt != NumberGuess); 


}System.out.println("Game over!"); 
System.out.println("All 7 Guesses used!"); 
System.exit(0); 

    }} 
+1

Atleast fournir ce problème que vous rencontrez ... – afzalex

+0

Aussi, si vous obtenez le nombre aléatoire '0' vous ne serez jamais en mesure de créer une entrée depuis' randomInt == 0' et 'numberGuess == 0' – SomeJavaGuy

Répondre

1

Vous devriez une seule boucle si vous souhaitez mettre fin après 7: suppositions

do { 
    .... 
} while(randomInt != NumberGuess) && (i < 8); 

Lorsque vous testez i seulement dans la boucle extérieure, vous donnez à l'utilisateur une numbe infinie r de suppositions, puisque vous ne quittez la boucle interne que lorsque l'utilisateur devine le nombre correct. Et seulement après avoir quitté la boucle interne, vous testez le nombre de suppositions.

+0

Thankyou Cela a résolu le problème. – Tom

+0

Ne pas remercier, accepter la réponse et lui donner upvote. – LoganMzz

0

Vous pouvez vérifier l'état de Existent aussi, sinon est pas deviné et i valeur dépassé par hasard donné (Ex: 7 dans votre cas):

}while(i < 8); 

Note: supprimés conditions inutiles voir @Rehman Commentaire.
Vous pouvez supprimer randomInt != NumberGuess car vous avez System.exit(0) si l'utilisateur a deviné le nombre correct.

+0

Pourquoi avons-nous besoin de 'randomInt! = NumberGuess'? Il y a une vérification avant la condition 'System.exit (0);' avec la condition 'NumberGuess == randomInt'. – Rehman

+0

Merci d'avoir signalé, mis à jour la réponse –

0

Je pense qu'il peut résoudre votre requête,

import java.util.Random; 
import java.util.Scanner; 
public class GuessingGame { 
    //Author TC13551 


    public static void main(String[] args) { 
     int NumberGuess = 0; 
     Random randomNumber = new Random(); 
     int randomInt = randomNumber.nextInt(51); 
     System.out.println("Guess the number between 0 -50:"); 
     int i = 0; 
      do{ 

       Scanner UserGuess = new Scanner(System.in); 
       NumberGuess = UserGuess.nextInt(); 
       if(NumberGuess < 0 || NumberGuess > 50){ 
        System.out.println("Invalid Input, please enter numbers between 0 and 50"); 
       } 
       else if(NumberGuess < randomInt){ 
        System.out.println("Guess is too small."); 
        i ++; 
        System.out. println("You have made "+i +" guesses out of 7"); 
       } 

       else if(NumberGuess > randomInt) { 
        System.out.println("Guess is too big."); 
        i ++; 
        System.out. println("You have made "+i +" guesses out of 7"); 

       } 
       else if(NumberGuess == randomInt){ 
        System.out.println("Correct! You win!"); 
        System.out.println("It took you "+ i + " guesses."); 
        System.exit(0); 
       } 


      }while(i < 8); 

      System.out.println("Game over!"); 
     System.out.println("All 7 Guesses used!"); 
     System.exit(0); 

    }} 
+0

Je pense que vous devriez ajouter quelques explications sur vos modifications;) – LoganMzz

0
public class GuessingGame { 
    public static void main(String[] args) { 
     int NumberGuess = 0; 
     Random randomNumber = new Random(); 
     int randomInt = randomNumber.nextInt(51); 
     System.out.println("Guess the number between 0 -50:"); 
     int i = 1; 
     Scanner UserGuess = new Scanner(System.in); 

     while (i <= 7) { 

      NumberGuess = UserGuess.nextInt(); 
      if (NumberGuess == randomInt) { 
       System.out.println("Correct! You win!"); 
       System.out.println("It took you " + i + " guesses."); 
       System.exit(0); 
      } else if (NumberGuess < 0 || NumberGuess > 50) { 
       System.out.println("Invalid Input, please enter numbers between 0 and 50"); 
      } else if (NumberGuess < randomInt) { 
       System.out.println("Guess is too small."); 
      } else if (NumberGuess > randomInt) { 
       System.out.println("Guess is too big."); 
      } 
      System.out.println("You have made " + i + " guesses out of 7"); 
      i++; 
     } 

     System.out.println("Game over!"); 
     System.out.println("All 7 Guesses used!"); 
     System.exit(0); 
    } 
} 

Aussi, vous ne devriez pas Scanner UserGuess = new Scanner(System.in); utiliser cette instruction dans la boucle. Une seule copie du scanner doit être créée, en dehors de la boucle.