繁体   English   中英

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

[英]Looping 10 times adding input, with for and do while loop in C#?

我是一名基础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();
    }
}

多谢你们!

你混合的东西。 你要么这样做:

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循环时, 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只是一个好习惯。 它会处理您需要输入文本的情况。 也可以使用try catch块。

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

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

在一个while循环中求和这样做

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变为假。 但这种情况从未发生,因为在你做的时候,计数器变量不会改变,所以程序在第一次迭代中永远存在。

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

为了举例,我们假设number1 = 4.当你执行line 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();  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM