2012-06-26 17 views
0

我正在測試一個調試功能,它顯示出良好的結果,如果我在發佈時測試它,它會顯示不同的結果。調試工作版本顯示其他細節C#

這就是:

int index = 0; 
     char[] result = new char[input.Length]; 
     for (int i = 0; i < input.Length; i++) 
     { 
      System.Random RandNum = new System.Random(); 
      int MyRandomNumber = RandNum.Next(0, 100); 
      if ((input[i] == '|') && (MyRandomNumber < 35)) 
      { 
       result[index++] = ' '; 
      } 
      else 
       result[index++] = input[i]; 
     } 
     return new string(result, 0, index); 

我的字符串,例如:「怎麼樣|你|做|今日」,我想更換的35%|帶「」(空格)的字符;

在調試中,它顯示了一個例子:你今天如何做,如何在今天或今天如何發佈。

您認爲如何?

如果您有其他建議,我向他們開放。

+0

您以錯誤的方式使用System.Random。你的種子價值每次都是一樣的。你確實明白,即使你修復了代碼,它將用空格代替35%的字符是沒有保證的嗎?你最好做一個小的隨機數。 –

回答

4

你的問題幾乎可以肯定你創建隨機數的方式。如果您創建新的System.Random而不傳遞種子,它將使用當前時間。如果這種情況發生得很快,新的對象將被創建爲相同的種子,因此會爲每個隨機數賦予相同的編號。

爲了解決這個問題,改變你這樣的代碼:

int index = 0; 
    char[] result = new char[input.Length]; 
    System.Random RandNum = new System.Random(); 
    for (int i = 0; i < input.Length; i++) 
    { 
     int MyRandomNumber = RandNum.Next(0, 100); 
     if ((input[i] == '|') && (MyRandomNumber < 35)) 
     { 
      result[index++] = ' '; 
     } 
     else 
      result[index++] = input[i]; 
    } 
    return new string(result, 0, index); 

也許別人可以解釋爲什麼這隻有在發行時,該部分的在我頭上發生誠實。有關調試需要更長的時間,所以種子是不同的?

+0

非常感謝好友,你節省了我的時間:) – user1461166

+1

@ user1461166如果它是正確的,你可以將它設置爲答案 – Boomer