2016-07-07 84 views
1

如何在java中生成隨機字符,但隨機生成是在哈希表內。 我想隨機選擇X,O或I並將其放入randomChar中。從哈希表中選取隨機元素

char randomChar='O'; 

Hashtable ht = new Hashtable(); 
ht.put(1, 'X'); 
ht.put(10, 'O'); 
ht.put(12, 'I'); 

遺憾的英語不好,

+2

1)不要使用原始類型; 2)使用'HashMap'而不是'Hashtable'。 –

+0

使用由三個值{1,10,12}組成的數組,並生成隨機數以查找查找Map的鍵。 – SMA

回答

2

如果沒有什麼特別的理由說明你爲什麼使用HashTable來做到這一點,那麼我建議你只需要使用一個數組。爲了得到一個隨機字符,你剛剛生成0array.length - 1一個隨機數:

char[] chars = { 'X', 'O', 'I' }; 
char randomChar = chars[new Random().nextInt(chars.length)]; 

但是,如果你想使用一個HashTable,你應該使用HashMap代替,而且你不應該使用原始類型來:

Map<Integer, Character> hashMap = new HashMap<>(); 
hashMap.put(1, 'X'); 
hashMap.put(10, 'O'); 
hashMap.put(12, 'I'); 

的第一步,得到一個隨機Character是從HashMap得到所有Character S的:

Collection<Character> characters = hashMap.values(); 

Collection類然而,這並不能讓我們與索引訪問集合,所以我們需要從它構造List

List<Character> characterList = new ArrayList<>(characters); 

我們從中得到List隨機字符,你可以生成一個隨機號碼用作索引。要做到這一點,你可以使用Random類:

Character randomChar = characterList.get(randomIndex); 

要做到這一切在一條線,你可以這樣做::

Random random = new Random(); 
int randomIndex = random.nextInt(hashMap.size()); 

最後你用這個指標得到的List隨機Character

Character randomChar = new ArrayList<>(hashMap.values()).get(new Random().nextInt(hashMap.size())); 
+0

它工作完美 – Simo

0

給定一個Hashtable提取按鍵與keySet(),並把它作爲與toArray數組。然後取一個範圍爲0 - size()-1的隨機數,從數組中選取相應的元素並提取表中相關的值。

或提取值並隨機選擇一個與等效過程。