首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语句和while循环

语句和while循环
EN

Stack Overflow用户
提问于 2022-03-27 23:19:01
回答 4查看 389关注 0票数 -5

代码跳过错误if语句,然后直接转到else if。

我需要圈通过,如果它小于2,那么它会走到错误,并再次回来,要求输入一个新的值。反之亦然。我是一个新程序员,发现C#的窗体很难理解。

代码语言:javascript
复制
        int.TryParse(txtNumberOfLaps.Text, out laps);

while (laps < 2 && laps > 20)
        {
            if (laps < 2)
            {
                MessageBox.Show("Laps can't be less than 2", "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            else if (laps > 20)
            {
                MessageBox.Show("Laps can't be more than 20", "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            else if (laps > 2 && laps < 20)
            {
                break;
            }
        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-03-27 23:45:32

它跳到哪个else if?你的循环包含两个。我设想程序在启动循环之前就已经退出了,因为循环的前哨值是无法满足的。对于给定的整数n20>n<2不存在。这实际上是不可能的。您可以通过检查while循环的每个条件是多少才能看到这一点。例如

n < 2最容易通过提供1来满足。

然而,n = 1使n > 20变得错误。另一方面,通过提供n > 20作为参数,21是最容易实现的。

n = 21使n<2的第一个条件变为假,因此循环永远不会开始

因此,在n的任何情况下,您的while循环都不会接收到初始的True值甚至开始。

现在这个问题已经解决了,让我们为您找到一个解决方案!:)

你要找的是这样的东西:

代码语言:javascript
复制
int.TryParse(txtNumberOfLaps.Text, out laps);

while(true)
{
   if (laps < 2 || laps > 20)
      {
         MessageBox.Show("Laps must be in range 2-20", "Error", 
         MessageBoxButtons.OK, MessageBoxIcon.Error);
         break;
      }
    else
      {
         // do other things 
         break;
      }
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-27 23:26:39

据我所见,我认为您的代码没有进入while循环。您是在问laps < 2 AND laps > 20,而我认为您想要的是laps < 2 OR laps > 20。你的循环没有意义,因为你的数字不能同时大于20和小于2

票数 6
EN

Stack Overflow用户

发布于 2022-03-28 00:04:18

不会输入while循环,因为数字不能同时小于2和大于20。laps < 2 && laps > 20可能应该是laps < 2 || laps > 20

纠正这一点,如果数字低于2或大于20,则输入while循环,但最后一个- if语句将永远不会为真。如果数字介于2到20之间,则不会输入while循环,因此无论如何都不会命中If语句。

下面是一个如何解决您所描述的问题的示例:

代码语言:javascript
复制
while (true)
{
    Console.WriteLine("Please enter a number between 2 and 20:");
    var input = Console.ReadLine();
    
    if (!int.TryParse(input, out var number))
    {
        // the input could not be parsed
        Console.WriteLine("Please enter a proper numeric value.");
    }
    else if (number < 2)
    {
        Console.WriteLine("The number can't be less than 2.");
    }
    else if (number > 20)
    {
        Console.WriteLine("The number can't be more than 20.");
    }
    else
    {
        // if all if-statements above are false, the number must be between 2 and 20
        Console.WriteLine($"You entered {number}. Good job!");
        break;
    }
}

您发布的代码看起来就像您第一次学习编程时需要解决的早期问题之一。这有点像一个诡计问题,在那里你会发现多个缺陷。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71641013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档