有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

if语句montyhall允许使用更简单的运算符和函数在JAVA中进行交易

因此,我已经在这项任务上工作了大约12个小时,但未能涵盖所有参数。我被要求制作一个基于Monty Hall“Lets make a deal”的程序,并要求检查每个用户输入的有效性,直到切换门

enter image description here

我有以下问题:

  • 如果用户想在zonk显示后切换门,他们会被带回到主菜单,要求他们选择一扇门。然后放入一个连续的输入循环

  • 如果用户的输入在开关门场景中无效,则会出现与上述相同的问题

  • 显示获胜百分比时出现问题

  • 想再次玩游戏时出现问题

请帮助,这是一个初学者,所以在代码的所有部分都非常欢迎批评

    System.out.println("WELCOME TO 'LETS MAKE A DEAL'");
    System.out.println("Please Enter 'A' to Play, 'B' To Watch, or 'Q' To Quit");
    Scanner input = new Scanner (System.in);
    String choice = input.next();

    boolean done = false;   
    double wins = 0;
    double loses = 0;       
    double games = 0;

    while (!done)
    {

        if(choice.equals("A"))
        {   
            System.out.println("Please Choose a door:\n");
            System.out.println("[1] [2] [3]\n");
            System.out.println("Type '1', '2', or '3'");

            if(input.hasNextInt())
            {   
                int chosenDoor = input.nextInt();
                if(chosenDoor <= 3 && chosenDoor > 0)
                {

                    int prizeIs = (int) ((Math.random() * 3) + 1);      
                    int finChoice = 0;
                    int zonkIs = 0;


                        while (prizeIs == chosenDoor)
                        {
                            zonkIs = (int) ((Math.random() * 3) + 1);
                            while (zonkIs == prizeIs)
                            {
                                zonkIs = (int) ((Math.random() * 3) + 1);
                            }
                        }
                        if (prizeIs == 1 && chosenDoor == 2)
                        {
                            zonkIs = 3; 
                        }
                        else if (prizeIs == 1 && chosenDoor == 3 )
                        {
                            zonkIs = 2; 
                        }
                        else if (prizeIs == 2 && chosenDoor == 1 )
                        {
                            zonkIs = 3;
                        }
                        else if (prizeIs == 2 && chosenDoor == 3 )
                        {
                            zonkIs = 1;
                        }
                        else if (prizeIs == 3 && chosenDoor == 1 )
                        {
                            zonkIs = 2;
                        }
                        else if (prizeIs == 3 && chosenDoor == 2 )
                        {
                            zonkIs = 1;
                        }

                        System.out.println("\nI Will Now Reveal A Zonk\n\nDoor [" + zonkIs + "]");
                        System.out.println("\nKnowing This, Would You Like To Switch Doors? ('Y' or 'N') ");

                        String decision = input.next();

                        if(decision.equals("Y"))
                        {
                            System.out.println("Pick A New Door (Not The One With A Zonk)");
                            chosenDoor = input.nextInt();
                            finChoice = chosenDoor;
                            System.out.println("\nWell Then\n\nThe Moment You've Been Waiting For\n");
                            System.out.println("The Prize is in\n\nDoor [" + prizeIs + "]");
                            if (prizeIs == finChoice || prizeIs == chosenDoor)
                            {
                                System.out.println("\nCONGRATUALTIONS!!!\nYOU WON!!!!!");
                                wins++;
                                games++;
                            }
                            else 
                            {
                                System.out.println("\n..Sorry, You Lost.");
                                loses++;
                                games++;
                            }

                            System.out.println("\nWould You Like To Play Again? ('Y' or 'N')");
                            decision = input.next();

                            if(decision.equals("N"))
                            {
                                System.out.println("\nWell Thanks For Playing\nYour Win Percentage was ");
                                if(wins <= 0.0 || wins < loses)
                                {
                                    double percentage = 0;
                                    System.out.printf(percentage +"%");
                                }
                                else
                                {
                                    double percentage = (wins-loses)/games * 100;
                                    System.out.printf("%5.2f", percentage +"%");
                                }   
                                done = true;
                                input.close();
                            }
                            else if(decision.equals("Y"))
                            {

                                System.out.println("*******************************");

                            }
                            else
                            {
                                System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");

                            }

                        }
                        else if(decision.equals("N"))
                        {
                            finChoice = chosenDoor;
                            System.out.println("\nWell Then\n\nThe Moment You've Been Waiting For\n");
                            System.out.println("The Prize is in\n\nDoor [" + prizeIs + "]");
                            if (prizeIs == finChoice || prizeIs == chosenDoor)
                            {
                                System.out.println("\nCONGRATUALTIONS!!!\nYOU WON!!!!!");
                                wins++;
                                games++;
                            }
                            else 
                            {
                                System.out.println("\n..Sorry, You Lost.");
                                loses++;
                                games++;
                            }

                            System.out.println("\nWould You Like To Play Again? ('Y' or 'N')");
                            decision = input.next();

                            if(decision.equals("N"))
                            {
                                System.out.println("\nWell Thanks For Playing\nYour Win Percentage was ");
                                if(wins <= 0.0 || wins < loses)
                                {
                                    double percentage = 0;
                                    System.out.printf(percentage +"%");
                                }
                                else
                                {
                                    double percentage = (wins-loses)/games * 100;
                                    System.out.printf("%5.2f", percentage +"%");
                                }   
                                done = true;
                                input.close();
                            }
                            else if(decision.equals("Y"))
                            {

                                System.out.println("*******************************");

                            }
                            else
                            {
                                System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");

                            }

                        }
                        else 
                        {
                            System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");

                        }


                    }
                else
                {
                    System.out.println("Invalid Entry, Please Try Again.");
                }

                }
                else
                {
                    System.out.println("Invalid Entry, Please Try Again.");
                    input.next();
                }
            }

            else if(choice.equals("B"))
            {

            }
            else if(choice.equals("Q"))
            {
                done = true;
                input.close();
            }
            else
            {
                System.out.println("Invalid Entry, Please Try Again..");
                choice = input.next();
            }
    }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    首先,这部分代码毫无意义:

    while (prizeIs == chosenDoor)
    {
        zonkIs = (int) ((Math.random() * 3) + 1);
        while (zonkIs == prizeIs)
        {
            zonkIs = (int) ((Math.random() * 3) + 1);
        }
    }
    

    这里的外部while循环,因为您既不改变prizeIs也不改变chosenDoor内部,将是一个无止境的循环

    此外,从三个门中选择Zonk也没有意义,因为在我们有一个prizeIs之后,只有两个Zonk,它们是其他的门。我想最好使用集合或数组洗牌,但如果不允许,可以列出各种可能性

    if ( prizeIs == chosenDoor ) { // Note it's an if, not a while.
        boolean chooseFirstZonk = Math.random() < 0.5; // 50% chance
        switch ( prizeIs ) {
            case 1:
                if ( chooseFirstZonk ) {
                     zonkIs = 2;
                } else {
                     zonkIs = 3;
                }
                break;
            case 2:
                if ( chooseFirstZonk ) {
                     zonkIs = 1;
                } else {
                     zonkIs = 3;
                }
                break;
            case 3:
                if ( chooseFirstZonk ) {
                     zonkIs = 1;
                } else {
                     zonkIs = 2;
                }
                break;
        }
    }
    

    然后这个if

    if (prizeIs == 1 && chosenDoor == 2)
    

    成为上述ifelse if

    接下来,你对这个游戏有点误解。现在zonk已经被揭露,只有两扇门被遮住了。如果用户选择切换,他不应该从三个门中选择一个新门。一个是已知的zonk,另一个是已知的他先前的选择,他选择放弃。因此,当用户想要切换时,您只需将chosenDoor更改为未打开的门

    • 如果最初选择的门是奖品门,则应将chosenDoor切换到第二个zonk。因此,如果prizeIs是1,chosenDoor也是,并且zonkIs是2,那么就改变chosenDoor = 3。如果zonkIs是3,则执行chosenDoor = 2
    • 如果最初选择的门不是奖品门,您应该分配chosenDoor = prizeIs-因为用户选择了一个zonk,而您显示了另一个zonk,所以剩下的唯一一个是奖品门

    因此,在这种情况下不需要用户输入

    因此,您需要更改大的if-else。如果用户选择切换,您将进行计算。这个if没有else,因为当用户没有说“是”时,他的意思是保留他原来的选择。此时,检查chosenDoor == prizeIs,并计算百分比

    计算

    首先,您只需要保留两个变量。比如赢和输,或者赢和游戏,或者输和游戏。你总是可以把输赢算作比赛的胜利

    所以一定要做{},不要做任何损失,当玩家赢的时候做{}

    现在计算成功百分比不需要那些ifs.wins不能小于零。它也不能大于games

    但重要的是要记住,如果你把一个整数除以一个整数,你将得到整数除法。也就是说,5/10给出的是零,而不是0.5,因为它不是整数

    因此,在除法之前,将其中一个数字转换为双精度是很重要的。一种简单的方法是将100更改为100.0,并将其移到开头:

    double percentage = 100.0 * wins / games;
    

    这样,100.0 * wins会自动将wins的值转换为double。因此,当其结果被games除时,games的值也被转换为double,并且不存在整数除