2017-07-07 35 views
0
using System; 

namespace SeventhConsoleProject 
{ 
    class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      Random NumGen = new Random(); 
      int diceRoll = 0; // The variable used to roll the dice 
      int attempts = 0; // The amount of times it takes Tom to get a 6 
      int amountmodifier = 10; //To edit the amount of times that the program loops so that I can get a more accurate average 

      Console.Write ("Tom wants to roll a dice multiple times and see how long it takes to get a 6.\nTom wants to get the average of " + amountmodifier + " successful attempts "); 
      Console.ReadKey(); 
      Console.WriteLine(); 

      for (int amount = 1; amount <= amountmodifier; amount++) { 
       while (diceRoll != 6) { 
        diceRoll = NumGen.Next (1, 7); 
        attempts++; 
       } 
      } 
      int averageafter = attempts/amountmodifier; 

      Console.WriteLine ("Over " + amountmodifier + " successful attempts it took Tom an average of " + averageafter + " attempts to get a 6"); 
      Console.ReadKey(); 
     } 
    } 
} 

我剛剛在他的關於c#的教程系列中觀看了Brackey的第7個視頻。我正試圖完成他在評論中留下的挑戰。for while while loop confusion from brackeys第7個教程視頻

最初的任務是創建一個程序,其中「湯姆」擲骰子,他不斷滾動骰子,直到他得到6.然後,用戶會被告知有多少次「湯姆」在他得到6之前擲骰子。我想出了這個部分。

但是,挑戰的一部分是你必須弄清楚如何找到10次「湯姆」滾動6次的成功嘗試的平均值。這部分讓我感到困惑。我的代碼背後的邏輯是,for循環將重複10次或更改變量amountmodifier爲的任意次數。每次for循環經過它的循環時,它都會經過一個while循環,直到「Tom」滾動一次6,然後「Tom」滾動一個6 while while循環將退出並且for循環將運行另一次,重複10次。

我的想法是,在for循環完成後,「嘗試次數」將包含10次成功嘗試的信息,它將除以amountmodifier以創建這些嘗試的平均值。但它不會工作。從我可以得出的結論要麼循環不重複10次或attempts數量不斷重置。我不明白爲什麼。如果有人會解釋我真的很感激。

+0

謝謝Soviut編輯我的問題,使其更易於閱讀。這真的很棒! – Skullgrabber

回答

1

的問題是在這裏:

for (int amount = 1; amount <= amountmodifier; amount++) { 
    // Add this line: 
    diceRoll = 0; 

    while (diceRoll != 6) { 
     diceRoll = NumGen.Next (1, 7); 
     attempts++; 
    } 
} 

的問題是,6卷後,diceRoll值是6。因此通過for循環,下一次,你從來沒有進入while循環可言,因爲diceRoll已經是6.

修復方法是添加我建議的行以確保diceRoll重置爲0(就像您原來的那樣)。

更妙的是,因爲你並不需要使用diceRoll其他地方,將是剛剛宣佈它的權利有:

for (int amount = 1; amount <= amountmodifier; amount++) { 
    int diceRoll = 0; // and get rid of the similar line at the top of Main 
+0

非常感謝你。這個問題讓我困惑很久。我從來沒有意識到擲骰子是問題。你真的讓我從頭痛中解脫出來!我無法說出我是多麼的感激。你太棒了! – Skullgrabber