2012-04-16 141 views
1

我對Java很新,我想生成一個長度爲「number」的隨機(x,y)座標數組,其中不包含重複項。 x或y值可以重複,但不得有重複的(x,y)座標。輸出不一定是點,只是一些保存座標x,y值的方法。在java中生成一個隨機點數組沒有重複

我可以生成一個隨機點數組,並嘗試使用Set來確保沒有重複值,但遇到了問題。我嘗試使用條件「while(set.size)」和'add'來禁止重複,以創建包含唯一點的正確大小的輸出。

這是代碼:

Set<Point> set = new HashSet<Point>(); 
Random position = new Random(); 
Point test=new Point(); 

do{ 
    test.x=position.nextInt(xx); 
    test.y=position.nextInt(yy); 
    //xx and yy are the random number limits called from another part of the code 
    set.add(test);  
} 
while (set.size()<number); 

List<Object> list = new ArrayList<Object>(set); 
Object[] coord = list.toArray(); 

此輸出正確的長度的陣列,但是每個元件是相同的。任何人都可以提供幫助嗎?

謝謝

回答

5

測試點在空間每次你循環相同的變量,以修復在循環中創建一個新的實例 - 前不只是一次吧:

Set<Point> set = new HashSet<Point>(); 
Random position = new Random(); 
Point test; 

do{ 
    test = new Point(); 
    test.x=position.nextInt(xx); 
    test.y=position.nextInt(yy); 
    //xx and yy are the random number limits called from another part of the code 
    set.add(test);  
} 
while (set.size()<number); 

List<Object> list = new ArrayList<Object>(set); 
Object[] coord = list.toArray(); 
+0

非常感謝,這完美的作品。 – user1337290 2012-04-16 22:04:02

2

您正在修改相同的點對象。但是,由於每次都更改X和Y,所以還要更改哈希代碼和點的平等性,因此最終會在該集中多次放置相同的對象。有趣的案例。

嘗試

do{ 
    test = new Point(); 
    test.x=position.nextInt(xx); 
    test.y=position.nextInt(yy); 
    //xx and yy are the random number limits called from another part of the code 
    set.add(test);  
} 
while (set.size()<number); 
+0

非常感謝,這完美地工作。 – user1337290 2012-04-16 22:03:34