2012-03-19 89 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();