java - 修复我的循环并需要输入检查器、Java 方面的帮助

标签 java while-loop user-input do-while

所以最近我发布了一个关于我的《Higher and Lower》游戏的问题,它到处都是而且不起作用,我在这个游戏中采取了另一种方法,并且它起作用了,这次只是一个小问题,显示比解释更容易,这是我的代码:

String noReplay = "\nThank you for playing.";
        String highLow = "(H)igher or (L)ower: ";
        String loseHigh = "Card is higher, you lose. Would you like to play again? Y/N: ";
        String loseLow = "Card is lower, you lose. Would you like to play again? Y/N: ";

        String playAgain;

        boolean replay = false;

        Random rand = new Random();
        Scanner scan = new Scanner(System.in);

        do {

            int card1 = rand.nextInt(13) + 1; 
            int card2 = rand.nextInt(13) + 1;

            System.out.println("Card is: " + card1);
            System.out.printf(highLow);
            String guess = scan.nextLine().toUpperCase();

            if(card2 > card1 && guess.equalsIgnoreCase("H")) {
                System.out.println("Card is: " + card2);
                System.out.printf(highLow);
                replay = true;
                guess = scan.nextLine().toUpperCase();

            }
            else if(card2 > card1 && guess.equalsIgnoreCase("L")) {
                System.out.println("Card is: " + card2);
                System.out.printf(loseHigh);
                playAgain = scan.nextLine().toUpperCase();
                if(playAgain.equalsIgnoreCase("Y")) {
                    replay = true;
                }
                else if(playAgain.equalsIgnoreCase("N")) {
                    replay = false;
                    System.out.println(noReplay);
                }
            }
            else if(card2 < card1 && guess.equalsIgnoreCase("H")) {
                System.out.println("Card is: " + card2);
                System.out.printf(loseLow);
                playAgain = scan.nextLine().toUpperCase();
                if(playAgain.equalsIgnoreCase("Y")) {
                    replay = true;
                }
                if(playAgain.equalsIgnoreCase("N")) {
                    replay = false;
                    System.out.println(noReplay);
                }
            }
            else if(card2 < card1 && guess.equalsIgnoreCase("L")) {
                System.out.println("Card is: " + card2);
                System.out.printf(highLow);
                replay = true;
                guess = scan.nextLine().toUpperCase();
            }

        } while(replay != false);

我的项目的目的是创建一个简单的游戏,当用户输入上面的卡号的较高或较低时,程序将给出正确的答案,或者从该阶段重玩游戏,或者询问用户是否愿意再次玩,因为失败了。

这工作正常,但是从我的输出来看:

Card is: 9
(H)igher or (L)ower: h
Card is: 11
(H)igher or (L)ower: l
*Card is: 6*
*(H)igher or (L)ower: l*
*Card is: 7*
Card is higher, you lose. Would you like to play again? Y/N: y
*Card is: 13*
*(H)igher or (L)ower: h*
*Card is: 10*
(H)igher or (L)ower: 

我们可以在星号行上看到,它没有做它应该做的事情。 当我说更高时,如果数字更低,它应该问我是否想再玩一次,因为我错了。在这种情况下不是吗?

这就是我的问题^

另一件事是,我想请求输入检查器的帮助,我只希望用户能够输入 Y、N、H、L(我已经解决了小写或大写问题) .

感谢您的阅读!

最佳答案

这应该是有意义的,并有助于降低游戏的复杂性。看看我对卡 1 与卡 2 的比较,您希望您的猜测基于卡 2 与卡 1 的比较,而不是相反。如果这是有道理的。希望这可以帮助!

     String highLow = "(H)igher or (L)ower: ";
     String loseHigh = "Card is higher, you lose.";
     String loseLow = "Card is lower, you lose.";
     String loseMessageDetails = "";
     boolean gameLost = false;
     boolean askAgain = true;
     Scanner scan = new Scanner(System.in);
     String guess = "";
     Random rand = new Random();

     int card1;
     int card2;

     while(askAgain)
     {   
         if(gameLost)
         {
             System.out.println(loseMessageDetails + "\nWould you like to play again? Y/N");
             guess = "";
             while(!guess.equals("Y") && !guess.equals("N"))
             {
                 guess = scan.nextLine().toUpperCase();
             }

             if(guess.equals("Y"))
             {
                 gameLost = false;
                 askAgain = true;
             }
             else
             {
                 askAgain = false;
             }
         }

         if(!gameLost)
         {
             card1 = rand.nextInt(13) + 1;
             card2 = rand.nextInt(13) + 1;
             System.out.println("Card is: " + card1);
             guess = "";
             //loop until correct type of input
             while(!guess.equals("H") && !guess.equals("L"))
             {
                 System.out.printf(highLow);
                 guess = scan.nextLine().toUpperCase();
             }
             //now we either correctly guessed or incorrectly guessed
             //here is a correct guess
             if((card1 < card2 && guess.equalsIgnoreCase("H")) ||
                (card1 > card2 && guess.equalsIgnoreCase("L")))
             {
                 askAgain = true;
             }
             else
             {
                 loseMessageDetails = guess.equalsIgnoreCase("L") ? loseHigh : loseLow;
                 gameLost = true;
             }
         }
     }

这还将确保仅输入有效的内容,并继续要求输入,直到用户输入正确的字母。

关于java - 修复我的循环并需要输入检查器、Java 方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662722/

相关文章:

java - 从数组列表中提取数据

java - 为什么应用程序名称没有显示在 Android 的工具栏中?

java - 以编程方式退出应用程序的适当方法是什么?

c# - 在 C# 中验证文本框输入

java - 安卓 : Error SimpleDateFormat Unknown pattern character 'u'

java - Java OFBiz 中的文件上传?

javascript - 为 children 挑战 JavaScript。第六章什么是正确答案

python - 通过不在主脚本中的方法更新 Qt 界面中的文本

c - 基本 While 循环不打印任何内容

c++ - 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是 C++ 中类的构造函数