循环10次添加输入,在C#中使用for和do while循环

本文关键字:循环 for while do 添加 10次 输入 | 更新日期: 2023-09-27 18:28:22

我刚上一门基本的C#课程,很难完成作业。我做了一个基本的计算器,它运行良好。现在,我必须添加一个名为"求和"的新按钮,它将从我的一个框(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();
    }
}

谢谢大家!

循环10次添加输入,在C#中使用for和do while循环

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

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
        {
            loopAnswer = loopAnswer + number1;
        } while (counter <= 10);

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

在一段时间内求和,做这个

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

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

要解决此分配,您只需要一个循环,绝对不需要嵌套循环。使用哪种循环机制并不重要。

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

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 <= 10变为false。但这种情况从未发生过,因为在你的do中,计数器变量没有改变,所以程序永远留在第一次迭代中。

我认为你应该去掉内部的do while,把equalsBox.Text = loopAnswer.ToString();放在for循环之外。

为了举例,我们假设number1=4。执行行loopAnswer = number1 + number1;时,loopAnswer的结果值将始终为8。如果您希望loopAnswer递增,那么您应该使用loopAnswer = loopAnswer + number1;或简写语法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();  
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();
}

它冻结是因为当它进入do while循环时,counter永远不会更改。如果它从未改变,counter <= 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只是一个很好的练习。它可以处理您需要文本输入的情况。也可以使用CCD_ 18块。