2016-12-27 5 views
1

私のコードに関して2つの質問があります。ない理由最後の質問:Mastermind Javaプログラム

  1. は、私が1と6の間に番号を入力したとき、私は具体的かつelse文は、何もときに発生しない場合は作成しようとすると、出力は「おっと1と6の間の数を入力してください」であります1から6までの番号を入力します。

  2. プログラムを再起動するにはどうすればよいですか?私のコードでは、if文がある ユーザーが "再生を再入力"私のコメントアウトされた行は、プログラムを再実行するために Mastermind.main()を読むが、それは動作しませんでした。ここで

はコードです:

import java.util.Scanner; 

public class Mastermind { 

    public static void main (String [] args) { 
     // boolean variable to signal when the game is over. 
     boolean done = false; 

     // Scanner object 
     Scanner scanner = new Scanner(System.in); 

     // sets the value to twelve outside the loop so it doesn't set back each time. 
     int guesses = 12; 

     System.out.println("Please enter a number between 1-6 to begin (or \"quit\") to exit."); 

     // while loop for the game 
     while (!done) { 

      //System.out.println("Please enter a number between 1-6 (or \"quit\") to exit the game:"); 

      // user input 
      String input = scanner.nextLine(); 
      int number = 0; //Just initialized to some number 


      // checks to see if the user wants to quit the game. 
      if (input.equalsIgnoreCase("quit")) { 
       System.out.println("Goodbye!"); 
       done = true; 
       scanner.close(); 
      } 

      else{ 

       try{ 
        //Trying to see if the input was a number 
        number = Integer.parseInt(input); 


       } 
       catch(Exception e){ 
        //The input wasn't an integer, it's invalid the starts loop again. 
        System.out.println("Invalid input."); 
        continue; 
       } 
      } 

      // defines necessary int variables 
      int random1 = (int) (Math.random() * 7); 
      int random2 = (int) (Math.random() * 7); 
      int random3 = (int) (Math.random() * 7); 
      int random4 = (int) (Math.random() * 7); 

      // If the user doesn't and decides to play, it runs this code. 
      // checks to see if the user enters a number between 1-6 
      if (number >= 1 && number <= 6) { 

       if (number == random1) { 
        System.out.println("You guessed a correct number!"); 
        guesses--; 
        System.out.println("guesses = " + guesses); 

       } 
       else if (number == random2) { 
        System.out.println("You guessed a correct number!"); 
        guesses--; 
        System.out.println("guesses = " + guesses); 


       } 
       else if (number == random3) { 
        System.out.println("You guessed a correct number!"); 
        guesses--; 
        System.out.println("guesses = " + guesses); 
       } 
       else if (number == random4) { 
        System.out.println("You guessed a correct number!"); 
        guesses--; 
        System.out.println("guesses = " + guesses); 

       } 
       else { 

        System.out.println("Sorry that's not one of the numbers! Try again."); 
        guesses--; 
        System.out.println("guesses = " + guesses); 
       } 
      } 


      if (guesses == 0){ 

       System.out.println("You've run out of guesses. To play again, enter \"play again\". Otherwise, enter or \"quit\")"); 
       if (input.equalsIgnoreCase("play again")){ 
        // how do I restart the program? 
        //Mastermind.main(); // QUESTION 2 
       } 
       else if (input.equalsIgnoreCase("quit")){ 
        System.out.println("Goodbye!"); 
        done = true; 
        scanner.close(); 
       } 
       else { 
        System.out.println("Goodbye!"); 
        done = true; 
        scanner.close(); 
       } 
      } 
      else { //QUESTION 1 

       System.out.println("Oops! Please choose a number between 1 and 6"); 
      } 
     } 
    } 
} 

答えて

1

guesses == 0falseと評価されたときにあなたがループを通ってそのメッセージを毎回印刷しています。おそらく、2つのブロックの順序を切り替えるだけで済みます。これに代えて:あなたのプログラムを再起動について

if (number >= 1 && number <= 6) { 
    ... 
} 
else { //QUESTION 1 
    System.out.println("Oops! Please choose a number between 1 and 6"); 
} 
if (guesses == 0) { 
    ... 
} 

if (number >= 1 && number <= 6) { 
    ... 
} 
if (guesses == 0) { 
    ... 
} 
else { //QUESTION 1 
    System.out.println("Oops! Please choose a number between 1 and 6"); 
} 

これを使用して、私は正確にロジックを読んでいるならば、あなたがする必要があるのはfalsedoneセットを維持し、へguessesをリセットしています12.

他の2つの論理ポイント。まず、ユーザーが"quit"を入力したことを検出した後、continueまたはbreakのいずれかとします。第二に、すべてのユーザーの推測で4つの新しい乱数を生成しているようです。私はあなたが意図したものかどうかは分かりませんが、ロジックを少し変更したいかもしれません。これは再起動ロジックにも影響する可能性があります。