簡體   English   中英

不斷循環這個猜謎游戲

[英]Looping this guessing game continuously

我對Java還是很陌生,我想知道在用戶正確猜出它后如何重置該游戲以詢問另一個數字?

到目前為止,這是我的代碼:

import java.util.Scanner;
public class Question2 {

   public static void main(String args[]) {
      Scanner keyboard = new Scanner(System.in);
         int count = 0;
         int a = 1 + (int) (Math.random() * 99);
         int guess = 0;

      System.out.println("Welcome to the Number Guessing Game");
      System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

    while (guess != a) {
    guess = keyboard.nextInt();
     count++;
    if (guess < 0 || guess > 100){
     if(guess == -1){
        System.out.print("Thank you for playing the game!");
             break;
      }
        System.out.print("Out of bounds. Try Again: ");
        continue;
    }
    if (guess > a) {
        System.out.print("The number is lower. Try again: ");
    }
    else if (guess < a) {
        System.out.print("The number is higher. Try again: ");
    }
    else if (guess == a) {
    System.out.println("Congratulations. You guessed the number in "
    + count + " tries!");
    }  
   }

}
}

你需要:

  • 在這樣的while條件移動最終游戲條件 while(guess != -1)
  • 在循環內移動歡迎問候
  • 游戲循環完成后移動“ 謝謝”問候語
  • 復位counta當用戶以重新開始贏得比賽
  • 在每次迭代中重置guess

現在,即使玩家猜到了數字,循環也不會結束,並且游戲循環只能有意地停止(通過輸入-1 =當前中斷條件):

import java.util.Scanner;
public class Question2 {
    public static void main(String args[]) {
        Scanner keyboard = new Scanner(System.in);
        int count = 0;
        int a = 1 + (int) (Math.random() * 99);
        int guess = 0;

        System.out.println("Welcome to the Number Guessing Game");
        while (guess != -1) {
            System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100){
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            }
            else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            }
            else if (guess == a) {
                a = 1 + (int) (Math.random() * 99);
                System.out.println("Congratulations. You guessed the number in " + count + " tries!");
                count = 0;
            }
            guess = 0;
        }
        System.out.print("Thank you for playing the game!");
}

可以對代碼進行更多的重構,例如將功能提取到函數中,以使代碼更具可讀性。 如果變量更改或出現更多條件,這也將使維護變得更容易。 例如,代碼可以像這樣重構:

import java.util.Scanner;
public class Question2 {
    public static void main(String args[]) {
        Scanner keyboard = new Scanner(System.in);
        int a = 0;
        int count = 0;
        int guess = 0;

        startNewGame();

        System.out.println("Welcome to the Number Guessing Game");

        while (guess != -1) {
            System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100){
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            }
            else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            }
            else if (guess == a) {
                System.out.println("Congratulations. You guessed the number in " + count + " tries!");
                startNewGame();
            }
            resetGuess();
        }
        System.out.print("Thank you for playing the game!");
    }

    private static int generateNewA() {
        return 1 + (int) (Math.random() * 99);
    }

    private static void startNewGame() {
        a = generateNewA();
        count = 0;
    }

    private static void resetGuess() {
        guess = 0;
    }
}

另一個解決方案是使用兩個嵌套循環,但是在這種情況下,IMO 循環中的 IMO太多了,並使源變得不必要地復雜。

將您的代碼包裝while (true)這將使您的代碼永遠運行下去。 請確保你也更新您的隨機a每場比賽,你的后count 然后從那里檢查猜測是否曾經為-1並在其為真時return 當您調用return ,它將結束游戲結束的方法。

Scanner keyboard = new Scanner(System.in);
while (true){
    int count = 0;
    int a = 1 + (int) (Math.random() * 99);
    int guess = 0;
    System.out.println("Welcome to the Number Guessing Game");
    System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

    while (guess != a) {
        guess = keyboard.nextInt();
        count++;
        if (guess==-1){
            System.out.print("Thank you for playing the game!");
            return;
        }else if (guess < 0 || guess > 100){
            System.out.print("Out of bounds. Try Again: ");
            continue;
        }
        if (guess > a) {
            System.out.print("The number is lower. Try again: ");
        }
        else if (guess < a) {
            System.out.print("The number is higher. Try again: ");
        }
        else if (guess == a) {
            System.out.println("Congratulations. You guessed the number in "
                    + count + " tries!");
        }  
    }

}

只需將整個代碼(掃描儀初始化除外)包裝在while循環中,這始終是正確的。 這樣,當一個游戲結束時,它將開始一個新的游戲。 然后,不要使用當用戶輸入-1break游戲的while循環的方法,只需使用System.exit(0) ,它將以狀態代碼0結束程序,表明程序已成功執行。

public static void main(String[] args) throws IOException {
    Scanner keyboard = new Scanner(System.in);
    while (true) {
        int count = 0;
        int a = 1 + (int) (Math.random() * 99);
        int guess = 0;

        System.out.println("Welcome to the Number Guessing Game");
        System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

        while (guess != a) {
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100) {
                if (guess == -1) {
                    System.out.print("Thank you for playing the game!");
                    System.exit(0);
                }
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            } else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            } else if (guess == a) {
                System.out.println("Congratulations. You guessed the number in "
                        + count + " tries!");
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM