首页 > 解决方案 > 为什么这个 While 循环不能正确执行

问题描述

游戏的目标是使用一个while循环。在这个循环中,它将根据输入的数字确定谁赢得了比赛。数字从 1 到 20。Challenge 是设置为 10 的变量。如果 <= Challenge,playerOne 将失去一分。如果 > 挑战,怪物将失去一分。谁先丢 3 分,谁就输了。我不需要生成随机数,我只需要通过扫描仪功能输入。

我认为变量对于扫描仪来说是必要的,这就是我添加 Dice 变量的原因。它们没有被使用,我很困惑是否需要它们来使扫描仪工作,以便用户可以进行输入。

当玩家和怪物被击中时,我也对如何从玩家和怪物进行子跟踪感到困惑。这就是为什么我为每个块下的变量设置它们拥有的点数。这是错误的,但我不知道如何正确显示它。

我能够得到一些要显示的消息,但任何数字都会给我相同的结果,即玩家一的 -1。

本质上,我被困在如何从这里用代码编写它。任何帮助是极大的赞赏。

import java.util.Scanner;

public class Task3 {

    public static void main(String[] args) {

        task3(20);

    }

    public static void task3(int challenge) {
        challenge = 10;
        int player = 3;
        int monster = 3;

        Scanner sc = new Scanner(System.in);

        System.out.println("Enter your dice roll");
        int diceRollOne = sc.nextInt();

        while (player <= challenge) {
            System.out.println("Monster misses");
            System.out.println("Enter your dice roll");
            int diceRollTwo = sc.nextInt();
            continue;

            if (player <= challenge) {
                System.out.println("-1 for player");
                player = 2;
                System.out.println("Enter your dice roll");
                int diceRollThree = sc.nextInt();

            } else if (player > challenge) {
                System.out.println("-1 for monster");
                monster = 2;
                System.out.println("Enter your dice roll");
                int diceRollFour = sc.nextInt();
                continue;

                if (player <= challenge) {
                    System.out.println("-1 for player");
                    player = 1;
                    System.out.println("Enter your dice roll");
                    int diceRollFive = sc.nextInt();
                    continue;

                    if (player > challenge) {
                        System.out.println("-1 for monster");
                        monster = 1;
                        System.out.println("Enter your dice roll");
                        int diceRollSix = sc.nextInt();
                        continue;
                    } else if (player <= challenge) {
                        System.out.println("-1 for player");
                        player = 0;
                        System.out.println("Monster Wins");
                        int diceRollSeven = sc.nextInt();
                        continue;

                        if (player > challenge) {
                            System.out.println("-1 for monster");
                            monster = 0;
                            System.out.println("Player wins!");
                            int diceRollEight = sc.nextInt();

                        }
                    }
                }
            }
        }
    }
}

标签: java

解决方案


在编写while循环时,必须首先考虑循环何时终止/循环何时继续的条件。在您的情况下,您希望循环在playeror 或monsterbecome时结束0。因此while循环继续运行的条件是相反的,即两者都是> 0

然后想想你想在每次迭代中做什么。在您的情况下,重复性任务是

  1. 从用户输入中读取一个整数
  2. 将整数与challenge
  3. 从对应的变量中减去 1 分

最后,循环结束后,可以使用playerand的值monster来判断结果并打印出来。


import java.util.Scanner; 


public class Task3 {
    public static void main(String args[]) {
        task3(10); 
    }
    
    public static void task3(int challenge)
    {
        int player = 3;
        int monster = 3;

        int dice = 0;
        
        Scanner sc = new Scanner(System.in);
        while(player > 0 && monster > 0)
        {
            System.out.println("Enter your dice roll");
            dice = sc.nextInt();
            if(dice > challenge)
            {
                monster--;
            }
            else
            {
                player--;
            }
        }
        if(player > monster)
        {
            System.out.println("Player wins!");
        }
        else
        {
            System.out.println("Monster wins!");
        }
    }
}

PS 试着理解代码,而不是仅仅复制粘贴到你的作业中:)


推荐阅读