当前位置: 首页 > 知识库问答 >
问题:

为什么我的Do While循环在不满足条件后不停止?

李谦
2023-03-14

我写了一个代码,获取用户对开始日期的输入

int year, startMonth, endMonth, startDay, endDay; 
    boolean checkStartDate = false, checkEndDate = false;
    Scanner input = new Scanner (System.in);

    //checking Start Date
    do
    {   
    checkStartDate = false;
    System.out.print("Enter the year: ");
    year = input.nextInt();
    System.out.print("Enter the start month: ");
    startMonth = input.nextInt();
    System.out.print("Enter the start day: ");
    startDay = input.nextInt(); 

        switch (startMonth) 
        {
          case 1:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
          break;

          case 2:
       if(startDay <= 28)
        {
            checkStartDate = true;
        }
            break;

          case 3:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }

            break;

          case 4:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 5:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 6:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 7:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 8:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 9:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 10:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 11:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 12:
        if(startDay <= 31)
        {
            checkStartDate = true;
            return;     
        }
          default:
          checkStartDate = false;
          System.out.println("Try again and enter a valid date \n");
        }   
        checkStartDate = false;

    } while (checkStartDate = true);

    //checking End Date

    do
    {   
    checkEndDate = false;
    System.out.print("Enter the year: ");
    year = input.nextInt();
    System.out.print("Enter the start month: ");
    endMonth = input.nextInt();
    System.out.print("Enter the start day: ");
    endDay = input.nextInt(); 

        switch (endMonth) 
        {
          case 1:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }

        else
        {
            checkEndDate = false;
            System.out.println("Print a valid start day");
        }
          break;

          case 2:
       if(endDay <= 28)
        {
           checkEndDate = true;
        }
            break;

          case 3:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }

            break;

          case 4:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 5:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 6:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 7:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 8:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 9:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 10:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 11:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 12:
        if(endDay <= 31)
        {
            checkEndDate = true;
            return;
        }

          default:
            checkEndDate = false;
            System.out.println("Try again and enter a valid date \n");
        }   
        checkEndDate = false;

    } while (checkEndDate = true);

    System.out.println("correct ");

共有2个答案

奚才良
2023-03-14

您添加了check StartDate=false

将while条件更新为while(检查开始日期) 作为其布尔值求值。

以下是工作代码

int year、startMonth、endMonth、startDay、endDay;布尔值checkStartDate=false,checkEndDate=false;扫描仪输入=新扫描仪(系统输入);

    //checking Start Date
    do
    {   
    checkStartDate = false;
    System.out.print("Enter the year: ");
    year = input.nextInt();
    System.out.print("Enter the start month: ");
    startMonth = input.nextInt();
    System.out.print("Enter the start day: ");
    startDay = input.nextInt(); 

        switch (startMonth) 
        {
          case 1:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
          break;

          case 2:
       if(startDay <= 28)
        {
            checkStartDate = true;
        }
            break;

          case 3:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }

            break;

          case 4:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 5:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 6:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 7:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 8:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 9:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 10:
        if(startDay <= 31)
        {
            checkStartDate = true;
        }
            break;

          case 11:
        if(startDay <= 30)
        {
            checkStartDate = true;
        }
            break;

          case 12:
        if(startDay <= 31)
        {
            checkStartDate = true;
            return;     
        }
          default:
          checkStartDate = false;
          System.out.println("Try again and enter a valid date \n");
        }   
       // checkStartDate = false;

    } while (checkStartDate);

    //checking End Date

    do
    {   
    checkEndDate = false;
    System.out.print("Check End Date... ");
    System.out.print("Enter the year: ");
    year = input.nextInt();
    System.out.print("Enter the start month: ");
    endMonth = input.nextInt();
    System.out.print("Enter the start day: ");
    endDay = input.nextInt(); 

        switch (endMonth) 
        {
          case 1:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }

        else
        {
            checkEndDate = false;
            System.out.println("Print a valid start day");
        }
          break;

          case 2:
       if(endDay <= 28)
        {
           checkEndDate = true;
        }
            break;

          case 3:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }

            break;

          case 4:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 5:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 6:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 7:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 8:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 9:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 10:
        if(endDay <= 31)
        {
            checkEndDate = true;
        }
            break;

          case 11:
        if(endDay <= 30)
        {
            checkEndDate = true;
        }
            break;

          case 12:
        if(endDay <= 31)
        {
            checkEndDate = true;
            return;
        }

          default:
            checkEndDate = false;
            System.out.println("Try again and enter a valid date \n");
        }   
      //  checkEndDate = false; 

    } while (checkEndDate);

    System.out.println("correct ");

明星剑
2023-03-14
while (checkEndDate = true)

您将check EndDate分配为true,因此循环将始终重复。您可能是指:

while (checkEndDate == true)

这将比较两个值。但由于您已经有了布尔值,因此不需要进行比较:

while (checkEndDate)

请注意,您可以通过组合类似案例来显着减少代码量。例如:

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
    if(startDay <= 31)
    {
        checkStartDate = true;
    }
    break;

30天的月份也是如此。

您还应该编写一个checkDate()方法,这样就不会将相同的代码编写两次。

 类似资料:
  • 当我像这样做一个常规的while循环时 它打印 但第二个while循环在满足条件后再次运行。 所以结果是 “佛罗多是一个很好的霍比特人的名字”难道它不应该停止印刷吗 我设置了x的条件 编辑:哦,我现在明白了,哈哈,我想增量是在代码的末尾,开始是0

  • 我有一个项目,我的方法得到两个日期,它不断地向方法添加一天,直到两个日期相等,然后您可以通过查看一天添加了多少次来查看日期相距有多远。我的问题是,当满足日条件时,即使日、月和年必须都相同才能停止工作,我的while循环也会退出

  • 我正在制作一个汽车游戏。只有“开始”、“停止”、“退出”命令。无法识别任何其他命令。 除了“退出”之外,所有命令都可以正常工作。使用while循环,它会执行和打印else语句: 命令=“退出”应该呈现当条件,因此跳过前面只执行外部的其他语句。为什么它执行其他两个语句,甚至认为同时条件不满足?

  • 我正在运行一个纸牌游戏,两个玩家轮流挑选纸牌,玩家向前移动许多空格。在这种情况下,一旦任何一个玩家达到25或更大的数字,他们击中了家,游戏应该停止。 我的while循环在两个玩家都达到25后继续循环,即使我已经设置了条件,在玩家1的值小于25或玩家2的值小于25时循环。 当循环条件出了什么问题? 编辑:这是我运行的一个测试的一些输出。

  • 我试图用Python做一个简单的计算器。 我希望用户写“and”,然后while循环应该结束。当我运行它并输入随机文本时,while循环工作并显示“重试”。然而,当我实际输入正确答案(“add”)时,while循环并没有结束——相反,它一直在说“再试一次”。 为什么会这样?我的代码怎么了?

  • 所以我必须在eclipse中为我的类创建一个java项目。分配是创建一个程序,允许用户在程序中输入整数,直到输入某个整数(42)。输入整数(42)后,程序将为1。平均输入的所有数字。2、显示输入的最小值和最大值。3、输入的数字总数。这些必须在不计算(42)的情况下进行计算。这就是我目前所拥有的。我可以从用户那里获得输入,一旦他们输入42,程序就会停止并显示总数,但包括42。我不知道如何为输入添加一