簡體   English   中英

我如何突破這個循環? java的

[英]How do I break out of this loop? java

我希望能夠讓用戶開始新一輪或結束游戲。 每次當我被問到是否要繼續(n / y)時我都不回答它並不會結束游戲。

另外我如何計算比賽次數? 私有靜態變量也是在我沒有做出的賦值中給出的。

import java.util.Scanner;
import java.util.Random;

public class GuessingGame {

    private static final int MIN_NUMBER = 1;
    private static final int MAX_NUMBER = 205;
    private static final int QUIT_VALUE = -1;
    private static final int LOSE_VALUE = -2;
    private static final int MAX_GAMES = 4;
    private static final int MAX_GUESSES = 10;
    private static final int HINT_THRESHOLD = 5;
    private static final int BACKDOOR_VALUE = -314;

    private static final String NOPE_MSG = "nope...";
    private static final String NOPE_NOPE_MSG
            = "you've already guessed that wrong guess...";
    private static final String INVALID_INPUT_BEGIN
            = "*** invalid input -- ";
    private static final String INVALID_INPUT_LESS_MIN_MSG
            = INVALID_INPUT_BEGIN + "must be greater than " + (MIN_NUMBER - 1);
    private static final String INVALID_INPUT_GREATER_MAX_MSG
            = INVALID_INPUT_BEGIN + "must be less than " + (MAX_NUMBER + 1);
    private static final String INVALID_INPUT_YN_MSG
            = INVALID_INPUT_BEGIN + "must be n or y";
    private static final String WINNER_MSG
            = "you're a winner... # of guesses: ";
    private static final String LOSER_MSG
            = "too many guesses entered... the number was ";
    private static final String QUITTER_MSG
            = "you're a quitter... the number was ";
    private static final String MAX_GAMES_PLAYED_MSG
            = "you've played the maximum number (" + MAX_GAMES + ") of games";
    private static final String ENTER_GUESS_PROMPT
            = "enter a guess between " + MIN_NUMBER + " and " + MAX_NUMBER
            + " (" + QUIT_VALUE + " to quit): ";
    private static final String PLAY_AGAIN_PROMPT
            = "Do you want to play again (n or y)? ";

    private static final String BOLD_BEGIN = "*** ";
    private static final String BOLD_END = " ***";
    private static final String PLAY_MSG = " playing the CSC" + MAX_NUMBER
            + " guessing game." + BOLD_END;
    private static final String WELCOME_MSG
            = BOLD_BEGIN + "Hello! Have fun" + PLAY_MSG;
    private static final String THANKS_MSG
            = BOLD_BEGIN + "Thanks for" + PLAY_MSG;

    public static void main(String[] args) {

        PlayGame();
    }

    static Random rng = new Random(System.currentTimeMillis());
    static Scanner stdin = new Scanner(System.in);
    static Scanner scan = new Scanner(System.in);

    static int n = MIN_NUMBER + rng.nextInt(MAX_NUMBER);
    static int guess;
    static int guessCounter = 0;

    static boolean endStart = true;

    public static void PlayGame() {

        System.out.println(WELCOME_MSG);
        while (endStart = true) {
            do {

                System.out.println();
                System.out.print(ENTER_GUESS_PROMPT);
                guess = stdin.nextInt();
                guessCounter = guessCounter + 1;

                if (guess < MIN_NUMBER && guess != BACKDOOR_VALUE
                        && guess != QUIT_VALUE) {
                    System.out.println(INVALID_INPUT_LESS_MIN_MSG + "\n");
                }
                if (guess > MAX_NUMBER) {
                    System.out.println(INVALID_INPUT_GREATER_MAX_MSG + "\n");
                }
                if (guess == BACKDOOR_VALUE) {
                    System.out.println(n);
                }

                if (guess == QUIT_VALUE) {
                    System.out.println(QUITTER_MSG + n);
                    System.out.println(PLAY_AGAIN_PROMPT);
                    String val = scan.next();
                    if (val.equalsIgnoreCase("y")) {
                        PlayGame();
                    }
                    if (val.equalsIgnoreCase("n")) {
                        System.out.println(THANKS_MSG);
                        break;
                    }
                }

                if (guessCounter == MAX_GUESSES) {
                    System.out.println(LOSER_MSG + n
                            + PLAY_AGAIN_PROMPT);
                    String val = scan.next();
                    if (val.equalsIgnoreCase("y")) {
                        PlayGame();
                    }
                    if (val.equalsIgnoreCase("n")) {
                        System.out.println(THANKS_MSG);
                        break;
                    }
                }

                if (guess > MIN_NUMBER || guess < MAX_NUMBER) {
                    if (guess != n || guess == BACKDOOR_VALUE) {
                        System.out.println(NOPE_MSG);
                    }
                    if (guess == n) {
                        System.out.println(WINNER_MSG + guessCounter);

                        System.out.println(PLAY_AGAIN_PROMPT);
                        String val = scan.next();
                        if (val.equalsIgnoreCase("y")) {
                            PlayGame();
                        }
                        if (val.equalsIgnoreCase("n")) {
                            System.out.println(THANKS_MSG);
                            break;
                        }
                    }
                }
            } while (guess > MIN_NUMBER || guess < MAX_NUMBER);

        }
    }
}

while(endStart == true) or while( endStart )看起來會更好,而while(endStart = true),絕不是endStart變量的比較,再加上你是不可避免的回歸每當你在PlayGame中調用PlayGame()一次獲得時( )方法,它一直變得越來越瘋狂

您可以創建一個boolean ,您可以在循環中檢查它,例如:

boolean test = true;
do{
   //your code
   //if you want to break you can change the test variable
   ...
     if(val.equalsIgnoreCase("n")){ 
         System.out.println(THANKS_MSG);
         test = false;
         break();
     } 
   ..
}while(guess > MIN_NUMBER || guess < MAX_NUMBER || test);

因此,如果您的條件或測試是錯誤的,您將從循環中斷開。

你可以使用帶標簽的break,Labeled break語句用於終止外部循環,循環應標記為可以工作。 舉個例子來說,

 loop1:
 for(){
   ...
    for(){
       ....
       break loop1;
    }
 }

暫無
暫無

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

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