【问题标题】:Why doesn't my Do While loop stop after the condition is not met?为什么不满足条件后我的 Do While 循环不停止?
【发布时间】:2019-10-01 21:32:55
【问题描述】:

我编写了一个代码,它获取用户在开始日期和结束日期的输入,并检查它们是否有效。在下面的代码中,我有 2 个 do..while 循环。一个用于开始日期,另一个用于结束日期。当执行第一个循环并且不满足条件时,程序不会继续执行另一个 do while 循环。如果我能收到此问题的解决方案,将会很有帮助。

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 ");

【问题讨论】:

  • 请注意:一旦您完成这项工作并拥有完整、可运行的代码,您可以将其发布到Code Review,我们可以帮助您编写更简洁的代码(例如改进巨人switch es)。

标签: java switch-statement boolean do-while


【解决方案1】:
while (checkEndDate = true)

您正在分配 checkEndDate 为真,因此循环将始终重复。您可能的意思是:

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() 方法,这样您就不会重复编写相同的代码。

【讨论】:

    【解决方案2】:

    您在每个 do while 循环的末尾添加了 checkStartDate= false &amp; checkEndDate = false;。这不是必需的。

    将 while 条件更新为 while (checkStartDate); 作为其布尔值的评估。

    下面是工作代码

    int year, startMonth, endMonth, startDay, endDay; 布尔 checkStartDate = 假,checkEndDate = 假; 扫描器输入 = 新扫描器 (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);
    
        //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 ");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2013-11-22
      • 1970-01-01
      • 2016-03-14
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多