2014-07-04 55 views
0

說我要挑5種隨機顏色數組列表像這樣的採摘隨機的唯一項目:從一個ArrayList

static final List<Color> colors = new ArrayList<Color>(); 

static { 
    colors.add(Color.RED); 
    colors.add(Color.BLUE); 
    colors.add(Color.GREEN); 
} 

這是很容易我就可以做到這一點...

static Random random = new Random(); 

public static Color getRandomColor() { 
    return colors.get(random.nextInt(colors.size()); 
} 

但是如果我想挑選不一樣的獨特顏色呢?所以說我選擇紅色,我怎麼能確保不再選擇紅色;最好不要將它從列表中刪除。

編輯:

我發現一些作品:

Color generatedColor = Theme.randomColor(); 
for (int i = 0; i < pie.segments.size(); i++) { 
    if (generatedColor == pie.segments.get(i).getColor()) { 
     generatedColor = Theme.randomColor(); 
     return; 
    } 
} 
this.color = generatedColor; 

然而有人建議我只是將它們全部刪除並重新添加一次,我已經完成了產生所有這些,其方法我應該去嗎?

編輯2:

洗牌後,我得到這個: http://i.imgur.com/HPKQNFH.png

謝謝! :)

+2

嘗試'Collections.shuffle(List)'並選取前N個顏色。 –

+0

你想[Shuffle](http://www.tutorialspoint.com/java/util/collections_shuffle.htm)? –

+0

我想過這個,但不是把它當成整個班級 - 我會放棄它。你怎麼看待'蠻力'呢?例如,我有一系列使用顏色的東西,如果它已被使用並且它是否重新生成,我會生成一個顏色檢查? – chapman

回答

1

使用remove方法,它返回該位置上的對象,然後將其刪除。

list.remove(int i)

然後你的方法就變成了:

public static Color getRandomColor() { 
    return colors.remove(random.nextInt(colors.size()); 
} 

,並在列表的大小爲0,重新插入所有的顏色。

+2

我不認爲這是有效的刪除每一個元素。我猜測別人提到的「Shuffle」是更好的選擇。 – Eypros

+0

+1雖然效率不如洗牌,但這是最小的改變。 –

+0

結束了這個解決方案,是最麻煩的大部分我遇到的錯誤是我自己的愚蠢XD – chapman

相關問題