2013-12-23 104 views
0

我需要幫助,使我的隨機發生器只產生三個字母:G,R,B。我該怎麼做,因爲B的ASCII碼是66,G是71,和R是82.我感謝任何幫助。 我試着開始這樣的:我怎樣才能讓我的程序得到三個特定的字母

public static void main(String[] args) { 
     // TODO code application logic here 
     String color=color(); 
     System.out.println(color); 
    } 
    static String color(){ 
     String color=null; 
     int randnum=(int)(Math.random()*3)+1; 
     if(randnum==1){ 
      color= "B"; 
     } 

     return color; 
    } 
} 

但我不明白的事情是,它還會產生其它號碼。我只想要G,R,B作爲隨機數輸出 。

+0

這是什麼語言? JavaScript的? C#? – RickyA

+4

我的建議是將這些字母存儲在一個數組中,然後使用0到2之間的隨機數來獲得該數組的一個隨機索引,給你一個隨機的字母,在這3個字母集中 –

+0

你可以使用模3並且做你的值也在0和2之間。 – Gab

回答

0

雖然有這樣做的更簡潔的方式,向人們展示的原則考慮:

letter=(int)(Math.random()*100) 
if(letter < 33) 
    letter="B"; 
else if(letter >= 33 && letter < 66) 
    letter="G"; 
else 
    letter="R"; 

如果我是一個不平凡的設置這樣做,不過,有任何機會,我會需要再次使用不同的字母集合,我會定義一個函數從數組中返回一個隨機選擇的元素,並傳入['B','G','R']。你從來沒有說過你在用什麼語言,所以我毫不猶豫地提供了一個例子,但是傳入數組並且在array.length中綁定隨機數。

+2

從長遠來看'R'會發生更多。 –

+0

從頭開始,是的。 'floor(Math.random()* 3)'在技術上是更正確的答案(或者更好的是,'floor(Math.random()* arr.length)',並且所有的字母都在數組中)。不過,我想要一個接近原始的答案,所以它只是引入了一個新概念。我可能已經過度了:) –

3

如果您所做的只是通過隨機值分配字母,則不必使其生成確切的數字66,71和82。只要做到(* 3的Math.random()),並做一些事情(INT),如:

if(letter==0){ 
    letter="B"; 
} 
else if(letter==1){ 
    letter="G"; 
} 
else if(letter==2){ 
    letter="R"; 
} 
0
match random() % 3 with 
| 0 -> B 
| 1 -> R 
| _ -> G 
0

如果你是java的工作,這是代表回答

只是把最好的方法數組列表中的紅綠藍並隨機將其隨機分組

List<String> list = new ArrayList<String>();
list.add("RED");
list.add("GREEN");
list.add("blue");
String random = list.get(randomizer.nextInt(list.size()));