2016-07-23 2 views
-1

Je suis actuellement un étudiant en cours de base Java. Je travaille sur un code qui demande à l'utilisateur une entrée pour qu'un jeu "démarre" et "quitte". Sooo j'ai choisi la chaîne "S" et "Q" respectivement. Si l'utilisateur entre S, le jeu continue. Si l'utilisateur entre Q, le programme affiche "Merci de jouer" ou quelque chose. Si l'utilisateur entre quelque chose d'autre que S et Q, le programme demande à nouveau jusqu'à ce qu'il obtienne une entrée valide. J'ai presque obtenu tout correctement, sauf pour la partie de vérification des erreurs. Des suggestions possibles pour corriger mon code?Vérification d'erreur dans Java: S à démarrer et Q à quitter

Merci d'avance! :)

(code partiel)

Scanner scan = new Scanner(System.in); 
    String userInput; 
    boolean game = false; 

    System.out.println("Welcome to the Game! "); 
    System.out.println("Press S to Start or Q to Quit"); 

    userInput = scan.nextLine(); 

    if (userInput.equals("S")){ 
     game = true; 
    } else if (userInput.equals("Q")){ 
     game = false; 
    } else { 
     do { 
      System.out.println("Invalid input! Enter a valid input: "); 
      userInput = scan.nextLine(); 
     } while (!"S".equals(userInput)) || (!"Q".equals(userInput)); // I'm not sure if this is valid??? 
    } 

    if (userInput.equals("S")){ 
     ///// Insert main code for the game here//// 
    } else if (userInput.equals("Q")){ 
    System.out.println("Thank you for playing!"); 
    } 
+1

Pouvez-vous être plus précis au sujet de votre problème? –

Répondre

2

Vous créez une boucle infinie:

while (!"S".equals(userInput)) || (!"Q".equals(userInput)); // always true 

Pour que cette condition ne tenez vous aurez besoin d'une entrée qui est égale à "S"et à "Q" ensemble. Il est facile de voir l'application De-Morgan's law:

while (!("S".equals(userInput)) && "Q".equals(userInput))); // always true 

De toute évidence, il ne se produira pas.

Vous voulez probablement:

while (!"S".equals(userInput)) && (!"Q".equals(userInput)); 
+0

Le code a finalement fonctionné! Merci, bon monsieur! –

+0

@dont_me: S'il vous plaît vérifier [Que dois-je faire quand quelqu'un répond à ma question?] (Http://stackoverflow.com/help/someone-answers) –

0

Je ne peux pas voter encore des réponses, mais celui qui le précède est exact.

Briser la logique:

input = "Z" 
while(!(S==Z) || !(Q==Z)) -> while(!(F) || !(F)) -> while(T || T) -> repeat 

input = "Q" 
while(!(S==Q) || !(Q==Q)) -> while(!(F) || !(T)) -> while(T || F) -> repeat 

Le passage à "et" fait le cas n ° 2 travail. Faites-vous quelque chose avec votre "jeu" booléen? Si l'utilisateur entre dans la boucle while alors le booléen sera toujours faux.