【问题标题】:Looping 10 times adding input, with for and do while loop in C#?循环 10 次添加输入,在 C# 中使用 for 和 do while 循环?
【发布时间】:2012-03-19 20:34:26
【问题描述】:

我刚开始学习基本的 C# 课程,但在分配工作时遇到了麻烦。我建立了一个基本的计算器,它工作正常。现在我必须添加一个名为“Sum”的新按钮,该按钮将从我的一个框(number1Txtbox)中获取输入,并通过循环将其添加到自身 10 次。

我翻遍了我的 c# 书籍的页面,但无法弄清楚这一点。我想出了如何用计数器等初始化循环,但我无法让它终生工作。

有人告诉我使用 for 循环,然后切换到 do while 循环。这对我来说真的没有意义,我认为我可以只用一个 for 循环来做到这一点。所以我的问题是:

1) 我什至需要切换到 do while 循环来执行此操作吗?
2) 我做错了什么?

这是我目前所拥有的,当我在文本框中输入数字后尝试点击求和按钮时,它只会让我的程序冻结:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter;
    int loopAnswer;
    int number1;

    number1 = int.Parse(number1Txtbox.Text);

    for (counter = 1; counter <= 10; counter++)
    {
        loopAnswer = number1 + number1;
        do
        {
            loopAnswer = loopAnswer + number1;
        } while (counter <= 10);

        equalsBox.Text = loopAnswer.ToString();
    }
}

谢谢大家!

【问题讨论】:

  • 除了 Adrians 的回答之外,您的程序冻结的原因是因为您的 do while 循环有一个条件,即计数器必须小于或等于 10。问题是您的 do while 循环是内部增加计数器的循环。这意味着 do while 永远无法完成执行,因为 for 循环(递增计数器)永远无法完成单次迭代。
  • @AnuragRanjhan,他的第一行说这是一项任务。所以我猜是的。
  • 这对于一个全新的初学者程序员来说是一个很好的问题。感谢您提供您的代码以及它用于家庭作业的事实。
  • 当作业说“使用for 循环,然后切换到do...while 循环时,它们可能意味着两种不同的解决方案,因此您可以证明您知道如何使用这两种解决方案。
  • 只是对切换到 do while 循环的评论。我相信他们要求您从 for 循环更改为 do while 循环,以便您可以获得使用这两种结构的一些经验,并且能够更好地在将来决定使用哪个循环结构。确实,您只需一个 for 循环即可完成此操作,他们要求您执行两次操作,一次使用 for,一次使用 do while。 @Adrian 已经为 for 循环提供了一个干净的答案,您应该接受所呈现的内容并将 for 循环替换为 do while 循环。

标签: c# for-loop do-while


【解决方案1】:

你把东西混在一起。你要么这样做:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter;
    int loopAnswer = 0;
    int number1 = int.Parse(number1Txtbox.Text);

    for (counter = 1; counter <= 10; counter++)
    {
        loopAnswer += number1; //same as loopAnswer = loopAnswer + number1;
    }
    equalsBox.Text = loopAnswer.ToString();
}

或者这个:

private void sumBtn_Click(object sender, EventArgs e)
{
    int counter = 1;
    int loopAnswer = 0;
    int number1 = int.Parse(number1Txtbox.Text);

    do
    {
        loopAnswer += number1; //same as loopAnswer = loopAnswer + number1;
        counter++;
    } while (counter <= 10);


    equalsBox.Text = loopAnswer.ToString();

}

另外,最终答案 (equalsBox.Text = loopAnswer.ToString();) 应该不在循环中。

【讨论】:

  • do while 循环不应该增加计数器吗?
  • 非常感谢 Adrian 和其他所有人,我实际上学到了一些东西,而不是仅仅得到答案。我已经喜欢这个网站了!
【解决方案2】:

你的程序冻结了,因为

        do
        {
            loopAnswer = loopAnswer + number1;
        } while (counter <= 10);

根本不更新计数器变量。因此计数器永远不会达到 10,所以这个循环永远不会退出。

在while循环中求和

counter = 1;
do {
    loopAnswer += number1;
    counter++;
} while(counter <= 10);

【讨论】:

    【解决方案3】:

    您的内部循环 (while) 无休止地运行,因为计数器永远不会增加,这就是您的程序挂起的原因。在一行上设置断点,以便能够调试您的程序并更好地了解循环的工作原理。

    要解决此任务,您只需要一个循环,绝对不需要嵌套循环。你使用什么样的循环机制并不重要。

    【讨论】:

      【解决方案4】:

      此代码导致无限循环(这是冻结的原因):

      for (counter = 1; counter <= 10; counter++)
      {
          loopAnswer = number1 + number1;
          do
          {
              loopAnswer = loopAnswer + number1;
          } while (counter <= 10);
      
          equalsBox.Text = loopAnswer.ToString();
      }
      

      实际上,您从 1 循环到 10,并且对于每次迭代,您都执行 loopAnswer = loopAnswer + number1; 直到条件 counter &lt;= 10 变为 false。但这永远不会发生,因为在你的 do-while 中计数器变量没有改变,因此程序在第一次迭代中永远保持不变。

      我认为你应该摆脱内部的 do-while 并将 equalsBox.Text = loopAnswer.ToString(); 放在 for 循环之外。

      【讨论】:

        【解决方案5】:

        为了举例,假设 number1 = 4。当您执行loopAnswer = number1 + number1; 行时,loopAnswer 的结果值将始终为 8。如果您希望 loopAnswer 递增,那么您应该使用 @ 987654324@,或简写语法loopAnswer += number1;

        关于for 循环与do-while 的使用,我猜这不是同时使用两个循环的问题,而是使用for 循环来说明这个概念的问题然后切换到使用do-while 循环来说明这个概念。

        你可以使用这样的 for 循环来完成这个练习:

        for (counter = 1; counter <= 10; counter++)  
        {  
            loopAnswer += number1; 
        }
        
        equalsBox.Text = loopAnswer.ToString();  
        

        您也可以使用这样的 do-while 循环来完成相同的功能:

        int counter = 1;
        do  
        {  
            loopAnswer += number1;  
            counter++;
        } while (counter <= 10);  
        
        equalsBox.Text = loopAnswer.ToString();  
        

        【讨论】:

          【解决方案6】:
          private void sumBtn_Click(object sender, EventArgs e)
          {
              int counter;
              int loopAnswer = 0;
              int number1;
          
              number1 = int.Parse(number1Txtbox.Text);
          
          
              for (counter = 1; counter <= 10; counter++)
              {
                      loopAnswer += number1;
              }
          
          
          equalsBox.Text = loopAnswer.ToString();
          
          }
          

          【讨论】:

            【解决方案7】:

            它冻结是因为当它进入do while 循环时,counter 永远不会改变。如果它从未改变,counter &lt;= 10 始终为真,因此您将获得无限循环。它卡在那里。

            private void sumBtn_Click(object sender, EventArgs e)
            {
                //these should default to 0, but we should to it explicitly, just in case.
                int loopAnswer = 0;
                int number1;
            
                if(int.TryParse(number1Txtbox.Text, out number1)
                {
                    for (counter = 1; counter <= 10; counter++)
                    {
                        loopAnswer += number1;
                    }
            
                    equalsBox.Text = loopAnswer.ToString();
                }
                else
                    equalsBox.Text = "Not A Number";
            }
            

            这里的TryParse 只是一个好习惯。它可以处理您需要文本输入的情况。也可以使用 try catch 块。

            【讨论】:

              猜你喜欢
              • 2021-07-27
              • 1970-01-01
              • 1970-01-01
              • 2019-05-19
              • 2018-05-09
              • 1970-01-01
              • 1970-01-01
              • 2021-07-18
              • 2017-08-29
              相关资源
              最近更新 更多