2013-05-11 70 views
0

我有一個應用程序,我需要將數據庫中的數據填充到4個標籤上,我希望這些標籤出現在隨機位置x上,但在以下位置x:79,199,437,319。標籤的隨機點

我試圖使用Random類,但偶爾會返回相同的位置。任何人都有這個解決方案嗎?我想要回答1 - 下面的答案4,以便在每次運行應用程序時洗牌位置。

answer1.Location = new Point(79, 60); 
answer2.Location = new Point(199, 60); 
answer4.Location = new Point(437, 60); 
answer3.Location = new Point(319, 60); 
+1

我d保持標籤的位置相同,只洗牌他們的關聯/我安寧。 – CodesInChaos 2013-05-11 14:14:41

+0

聰明的用戶總是可以從顯示窗口順序的實用程序中看到答案,如Spy ++。 – 2013-05-11 16:04:17

回答

0

我的東西你的用法是錯誤的。

Random class的正確用法是:

  1. 實例化類

    Random rnd1 = new Random(); 
    
  2. 比訪問 「randome」 功能得到randome數與:

    var yourrand = Random.Next(437 /*The maximum*/); 
    

Next function

2

你可以把一個List<Point>你的觀點:

var list = new List<Point> 
    { 
     new Point(79, 60), 
     new Point(199, 60), 
     new Point(319, 60), 
     new Point(437, 60) 
    }; 

然後,用Fisher-Yates algorithm

var rand = new Random(); 
var n = list.Count - 1; 
for(var n = list.Count; n > 0; n--) 
{ 
    int k = rng.Next(n - 1); 
    var value = list[k]; 
    list[k] = list[n]; 
    list[n] = value; 
} 

洗牌,然後你使用:

answer1.Location = list[0]; 
answer2.Location = list[1]; 
answer3.Location = list[2]; 
answer4.Location = list[3]; 
+0

謝謝,它工作正常:) – avi 2013-05-11 14:28:54

+0

@avi(這個答案+1,但...)我們還應該提到,你不能一直創建一個新的Random(),因爲如果你創建它們太緊密時間,他們會產生相同的數字(由於他們使用相對緩慢變化的時間戳作爲種子)。你應該在你的Form類中創建一個Random,並在每個shuffle中重新使用它。 – 2013-05-11 14:29:10