java - 如何修复此单人骰子游戏(4 - 4 面骰子)的循环?扫描仪输入无法产生正确输出的问题

标签 java for-loop while-loop java.util.scanner do-while

//我已经为此工作了一整天,但似乎仍然陷入困境。 //我没有收到任何明显的错误,但循环似乎被破坏了。 //我是一个初学者,所以很可能我错过了一些大事,但只是忽略了它。 //我的课的作业要在午夜截止,哈哈。 //我觉得我构建了基本格式,但是我对使用循环的不熟悉确实让我陷入了困境。我在网上其他地方查看过,但人们制作的许多“骰子”程序仅与一个六面骰子有关,并且不涉及基于回合的用户输入。 //任何有用的提示都很棒,有没有更有效的方法来构建这个游戏?我知道创建多个类会清理程序的外观,但我目前只是在寻找功能。

package prgm06;

import java.util.Scanner;

public class DiceGame 
{   
    public static void main(String []args) //main DiceGame loop.
    {
        String answer;
        Scanner stdIn = new Scanner(System.in);
        int userWin = 0, userLose = 0, turnCounter = 0;
        System.out.println("\t" + "Welcome to Computer Dice");
        System.out.println("-----------------------------------------");
        System.out.println("The outcome of your roll will determine" + "\n" + "if you win or lose the round." + "\n");
        System.out.println("Any Quad and you win.");
        System.out.println("Any Triple and you win.");
        System.out.println("Any High Pair and you win.");
        System.out.println("Anything else and you lose.");
        System.out.println("-----------------------------------------");
        System.out.println("Do you wish to play? [y,n]: ");
        do { // I always want the dice to roll unless "n" is selected.
            answer = stdIn.next();
            int d1 = (int)(Math.random() * 4) + 1;
            int d2 = (int)(Math.random() * 4) + 1;
            int d3 = (int)(Math.random() * 4) + 1;
            int d4 = (int)(Math.random() * 4) + 1;
        }
        while(answer.equalsIgnoreCase("y")); // issues with "y" not printing if/ else statements
        {
            int d1 = (int)(Math.random() * 4) + 1;
            int d2 = (int)(Math.random() * 4) + 1;
            int d3 = (int)(Math.random() * 4) + 1;
            int d4 = (int)(Math.random() * 4) + 1;
            System.out.println(d1 + "\t" + d2 + "\t" + d3 + "\t" + d4);
            if ((d1 == d2) && (d1 == d3) && (d1 == d4))
            {
                userWin++;
                System.out.println("\n" + "Round Results: Win");
                System.out.println(turnCounter + " Rounds played.");
            }
            else
            {
                userLose++;
                System.out.println("\n" + "Round Results: Loss");
                System.out.println(turnCounter + " Rounds played.");
            }
        }
//      do
        {
            answer = stdIn.next();  // I'm not sure if i need to keep using this at each segment
        }
        for(answer.equalsIgnoreCase("n");;  // will not print on first user input of "n".
        {
//          System.out.println();
            System.out.println("Game Results:");
            System.out.println("User won: " + userWin + " Games.");
            System.out.println("User lost: " + userLose + " Games.");

            if (userWin > userLose)
            {
                System.out.println("Your win/loss ratio is: " + (userWin/userLose) + " Good Job!");
                System.out.println(turnCounter + " Rounds played.");
            }
            else if (userWin < userLose)
            {
                System.out.println("Your win/loss ratio is: " + (userWin/userLose) + " You shouldn't bet money on this game...");
                System.out.println(turnCounter + " Rounds played.");
            }
            else
            {
                System.out.println("Your win/loss ratio is: 1.0 .");
                System.out.println(turnCounter + " Rounds played.");
            }
        break;
        }
    }
}

最佳答案

我已经编辑了你的代码。有些错误与语法有关,有些可能与逻辑流程有关。这应该作为基础,您可以根据需要修改和改进它:

import java.util.Scanner;

public class DiceGame {
    public static void main(String []args) //main DiceGame loop.
    {
        String answer;
        Scanner stdIn = new Scanner(System.in);
        int userWin = 0, userLose = 0, turnCounter = 0;
        System.out.println("\t" + "Welcome to Computer Dice");
        System.out.println("-----------------------------------------");
        System.out.println("The outcome of your roll will determine" + "\n" + "if you win or lose the round." + "\n");
        System.out.println("Any Quad and you win.");
        System.out.println("Any Triple and you win.");
        System.out.println("Any High Pair and you win.");
        System.out.println("Anything else and you lose.");
        System.out.println("-----------------------------------------");

        do { // I always want the dice to roll unless "n" is selected.

            System.out.println();

            System.out.println("Do you wish to play? [y,n]: ");
            answer = stdIn.next();

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

                turnCounter++;

                int d1 = (int)(Math.random() * 4) + 1;
                int d2 = (int)(Math.random() * 4) + 1;
                int d3 = (int)(Math.random() * 4) + 1;
                int d4 = (int)(Math.random() * 4) + 1;

                System.out.println(d1 + "\t" + d2 + "\t" + d3 + "\t" + d4);

                if ((d1 == d2) || (d1 == d3) || (d1 == d4) || (d2 == d3) || (d2 == d4) || (d3 == d4) {
                    userWin++;
                    System.out.println("\n" + "Round Results: Win");
                    System.out.println(turnCounter + " Rounds played.");
                } else {
                    userLose++;
                    System.out.println("\n" + "Round Results: Loss");
                    System.out.println(turnCounter + " Rounds played.");
                }

                System.out.println("Game Results:");
                System.out.println("User won: " + userWin + " Games.");
                System.out.println("User lost: " + userLose + " Games.");

                System.out.println("Your win/loss ratio is: " + userWin + ":" + userLose);

                if (userWin > userLose) {System.out.println("Good Job!");}

                if (userWin < userLose) {System.out.println("You shouldn't bet money on this game...");}

                System.out.println(turnCounter + " Rounds played.");

            }

        } while(answer.equalsIgnoreCase("y"));
    }
}

一些注意事项:

  • 只要用户输入“y”,游戏就会继续运行,因为这是您的条件:answer.equalsIgnoreCase("y")。

  • 我更改了获胜条件逻辑,以使用逻辑 OR 运算符检查至少一对

  • 我删除了赢/输比率结果的除法运算符,只是将其替换为赢:输的显示;如果您希望它计算实际百分比或小数值,则可以更改此值,但您必须检查 Loss == 0 的情况以防止除以零错误

  • Do-While 循环应该包含从开始到结束的所有游戏玩法,因此要求您再次玩的问题应该出现在该循环的开始或结束处(我将其放在开始处) )

关于java - 如何修复此单人骰子游戏(4 - 4 面骰子)的循环?扫描仪输入无法产生正确输出的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601249/

相关文章:

java - 如何将 Reader 解析为日历?

java - 在Java中,谁能解释为什么这个对象为空?

c++ - 私有(private)映射值的基于范围的 for 循环

python - 如何在Python的for循环中创建唯一的字典?

python - 循环列表时的累积加法

c - while 循环根据用户输入的整数进行倒计时

java - 隐藏菜单栏时 JMenuItem 加速器不起作用

java - 绑定(bind)到 Android 库中定义的远程服务失败

c++ - 为什么这段代码会无限循环?

c - 使用 scanf 的验证检查在循环内不起作用