首页 > 解决方案 > 如何修复内部 While 循环

问题描述

帮助!

内部 while 循环 (askAgain) 无法正常工作。我想要它,这样当用户按“y”开始新游戏时,它将退出内部循环并返回到外部 whileloop(keepPlaying)并按“n”退出游戏。

如果用户既没有按 'y' 也没有按 'n',也没有按任何其他键,它将循环回到:askAgain,直到用户做出有效的选择。

该程序未按预期工作。请帮忙。

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

public class Game {


    private  int       playerGuess;

    private  boolean   keepPlaying   = true;
    private  boolean   askAgain      = true;


    Random    randomNumber;   
    int       generatedYear; 
    int       generatedMonth; 
    int       generatedDay;   


    /**
     * 
     */
    public Date getRandomDate() {       

        randomNumber   = new Random();
        generatedYear  = randomNumber.nextInt(600) + 1600;
        generatedMonth = randomNumber.nextInt(12) + 1;
        generatedDay   = randomNumber.nextInt(31) + 1;  

        Date generatedDate = new Date (generatedYear, generatedMonth, generatedDay);

        return generatedDate;
    }   

    /**
     * 
     */
    public void guessTheDate() { 


        Scanner userInput   = new Scanner(System.in);

        while(keepPlaying) { 

            int ranDateYear= getRandomDate().getYear();

            System.out.println("New Game!!");
            System.out.println();
            System.out.print("Please guess the year. (0 - 2199): ");

            while(userInput.hasNext()) { 

                if(userInput.hasNextInt()) { 

                    playerGuess = userInput.nextInt();

                    if(playerGuess > ranDateYear) { 

                        System.out.println("Out of bounds, too high: " + playerGuess + " (Randomized Number: " +  ranDateYear+ ")");
                        System.out.println();
                        System.out.println("Try again!");
                        System.out.print("Please guess the year (0 - 2199): ");

                    }else if(playerGuess < ranDateYear) {

                        System.out.println("Out of bounds, too low:  " + playerGuess + " (Randomized Number: " + ranDateYear + ")");
                        System.out.println();
                        System.out.println("Try again!");
                        System.out.print("Please guess the year (0 - 2199): "); 

                    }else{      

                        if (playerGuess == ranDateYear) {

                            System.out.println("Correct! It is a match:  " + playerGuess + " (Randomized Number: " + ranDateYear + ")");
                            System.out.println();
                            System.out.print("Play again? (Y/N): ");

                            while (askAgain) {

                                while (userInput.hasNext()) {

                                    if (userInput.hasNext()) {

                                        String input = userInput.next();

                                        if (input.equalsIgnoreCase("y")) {

                                            keepPlaying = true;

                                        } else if (input.equalsIgnoreCase("n")){

                                            keepPlaying = false;

                                        } else {

                                            askAgain = true;
                                        }

                                        break;                              
                                    }


                                }

                            }

                        }                           
                    }   

                } else {

                    System.out.println("Invalid input, not a number.");
                    System.out.print("Enter another number: ");
                    userInput.next();

                }
            }   
        }

        System.out.println("The end. Thank you for playing!");
    }
}

标签: javawhile-loop

解决方案


if (userInput.hasNext()) {

    String input = userInput.next();    
    if (input.equalsIgnoreCase("y")) {    
          keepPlaying = true;   
          askAgain = false;
    } else if (input.equalsIgnoreCase("n")){    
          keepPlaying = false;  
          askAgain = false;  
    } else {    
          askAgain = true;
    }    
    break;                              
}

并参考下一条和下一条线的区别

编辑:

while(userInput.hasNext()) {替换为告诉用户正在输入的变量,因此在 askAgain 循环中,该变量将变为 false。

尝试这个:

    while(enteringInput) {

        try{
                playerGuess = userInput.nextInt();

                if(playerGuess > ranDateYear) { 

                    System.out.println("Out of bounds, too high: " + playerGuess + " (Randomized Number: " +  ranDateYear+ ")");
                    System.out.println();
                    System.out.println("Try again!");
                    System.out.print("Please guess the year (0 - 2199): ");

                }else if(playerGuess < ranDateYear) {

                    System.out.println("Out of bounds, too low:  " + playerGuess + " (Randomized Number: " + ranDateYear + ")");
                    System.out.println();
                    System.out.println("Try again!");
                    System.out.print("Please guess the year (0 - 2199): "); 

                }else{      

                    if (playerGuess == ranDateYear) {

                        System.out.println("Correct! It is a match:  " + playerGuess + " (Randomized Number: " + ranDateYear +")");


 System.out.println();
                        System.out.print("Play again? (Y/N): ");

                        while (askAgain) {           

                            System.out.print(askAgain);
                            while (userInput.hasNext()) {

                    String input = userInput.nextLine();    
                    if (input.equalsIgnoreCase("y")) {    
                        keepPlaying = true;   
                        askAgain = false;
                    } else if (input.equalsIgnoreCase("n")){                
                    keepPlaying = false;  
                        askAgain = false;
                                            enteringInput = false;  
                    } else {    
                        askAgain = true;
                    }    
                        break;   
                            }
                        }
                    }                           
                }  
                }catch(Exception e){
                   System.out.println("Invalid input");
                   userInput.nextLine();
                }                    
        }            

推荐阅读