2014-08-30 63 views
0

im在c#中的骰子模擬器中面臨一個問題。函數RandomGenerator生成一對骰子,直到這兩個骰子的總和等於參數中的給定數字(從2到12)。骰子對的滾動次數。問題是,當我輸入一個偶數時,它正確地返回count.But當我輸入一個奇數時,它什麼都不做,甚至沒有給出錯誤,短劃線閃爍,閃爍。代碼如下。任何人都可以幫助我?骰子模擬器int c#

using System.Threading.Tasks; 
namespace ConsoleApplication1 
{ 
    class Program 
    { 


     static int RandomGenerator(int n)          
     { 

      Random rand1 = new Random();            
      Random rand2 = new Random();            

      int sum = rand1.Next(1,7) + rand2.Next(1,7);         
      int count = 1;                

      { 
       sum = rand1.Next(1,7) + rand2.Next(1,7);         
       count++; 
      } 

      return count; 

     } 


     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello! this program a pair of dice until total on dice is equal to your given number.\n\n"); 

      Console.WriteLine("Enter the number :"); 
      int num = int.Parse(Console.ReadLine()); 

      int rolls = RandomGenerator(num); 
      Console.WriteLine("The number of rolls are:" + rolls); 

     } 
    } 
} 
+0

你錯過了一個for循環或什麼?我甚至沒有看到使用變量n – 2014-08-30 09:41:04

+2

您是否嘗試**調試**代碼? – Carsten 2014-08-30 09:44:03

+0

也請添加缺少的*循環*並刪除第二個RNG - 只需要一個 – Carsten 2014-08-30 09:45:33

回答

6

的問題是,你正在使用兩個Random實例。默認爲they're initialized with Environment.TickCount seed,其精度約爲15毫秒。這意味着它幾乎可以確保您的Random類實例獲得完全相同的種子,因此每次調用Next時都會生成相同的值。兩個相同數字的總和總是偶數。

一個合適的解決方案是使用骰子的單個實例Random

從我
+0

我明白你的解決方案,我的程序運行良好,但你可以啓發我關於「種子」,它是什麼意思? – 2014-08-30 10:16:53

+0

[Wikipedia](https://en.wikipedia.org/wiki/Random_seed)可以讓你開始。您可以在我鏈接的源文件中看到它在.NET中的實際工作方式。 – 2014-08-30 10:20:27

0

難道你錯過了一段時間或for循環?

我想你應該有類似下面的代碼在你的RandomGenerator方法:

static int RandomGenerator(int n)          
    { 

     Random rand1 = new Random();            

     int sum = rand1.Next(1,7) + rand1.Next(1,7);         
     int count = 1;                

     //while the sum variable isn't equal to your provided number, roll the dices again 
     while(sum != n) 
     { 
      sum = rand1.Next(1,7) + rand1.Next(1,7);         
      count++; 
     } 

     return count; 

    } 
+0

您應該添加爲什麼選擇只使用一個「隨機」對象而不是OP中的兩個。 – 2014-08-30 09:51:04

+0

你是對的@BartvanNierop,我忘記了。但維克多的解釋是絕對正確的:) – LuisF 2014-08-30 09:58:40

1

建議解決方案:

public static int RandomGenerator(int n) 
{ 
    Random random = new Random(); 
    int sum = 0; 
    int count = 0; 

    do 
    { 
     sum = random.Next(1, 7) + random.Next(1, 7); 
     count++; 
    } while (sum != n); 

    return count; 
} 

維克多葉菲莫夫是對關於隨機實例,我用隨機數發生器面臨着類似的問題,一旦產生顏色:)

我也建議你執行對用戶輸入進行完整性檢查,以確保輸入的值始終在2到12之間。這是爲了避免在條件sum != n永遠不會實現時陷入do-while循環。