2012-03-19 90 views
4

我是一个新的基础C#课程,我无法获得工作分配。我建立了一个基本的计算器,它工作正常。现在我不得不添加一个名为“Sum”的新按钮,该按钮将从我的一个箱子(number1Txtbox)获取输入,并通过循环将其添加到自身10次。循环10次添加输入,用for和while循环在C#中?

我通过我的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(); 
    } 
} 

谢谢你们!

+0

这是功课? – 2012-03-19 20:37:39

+2

除了Adrians的回答,你的程序被冻结的原因是因为你的while while循环有一个条件,即计数器必须小于或等于10.问题是你的while循环是*内部循环增加柜台。这意味着,虽然永远无法完成执行,因为for循环(递增计数器)永远不会完成一次迭代。 – Brandon 2012-03-19 20:38:17

+0

@AuuragRanjhan,他的第一行表示这是一项任务。所以我猜是的。 – Brandon 2012-03-19 20:38:36

回答

7

你混的事情。你要么做:

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();)应跳出循环。

+0

不应该while循环增加计数器吗? – Brandon 2012-03-19 20:42:00

+0

@Brandon是的,它应该.Aaaah,快速....现在已经修复,谢谢 – 2012-03-19 20:42:52

+0

Tha阿德里安和其他人一样,我实际上学到了一些东西,反对只是得到答案。我很喜欢这个网站! – drowningincoffee 2012-03-19 21:53:51

0

它会冻结,因为当它进入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这里只是一个很好的做法。它会照顾到你会有文字输入的情况。 A try catch块也可以使用。

0
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(); 

} 
0

你的程序没有响应,因为

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

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

在while循环总结(而)被无休止地运行,因为计数器永远不会增加要这样做

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

你的内循环,这就是为什么你的程序挂起。在一行上设置断点以便能够调试程序并更好地理解循环的工作方式。

要解决这个任务,你只需要一个循环,最初不是嵌套循环。不管你使用什么样的循环机制。

0

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

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中,而counter变量不会改变,所以程序在第一次迭代中保持永久。

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

0

为了例子起见,让我们说,数字1 = 4,当你执行线loopAnswer = number1 + number1;所产生的loopAnswer值将始终是8.如果您想loopAnswer递增,那么你应该使用loopAnswer = loopAnswer + number1;,或语法速记loopAnswer += number1;

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

你可以通过完成这项工作对于一个像这样的循环:

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