2013-12-23 58 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()));