2009-11-04 45 views
2

我想使用的东西随机字母像如何获得Java中的随机字母?

char ch = 'A' + randomNumber ; // randomNumber is int from 0 to 25 

但是,让“失精”编译错误(相同的,如果randomNumber只是一个字节)。 我想用Unicode代码来说,上面的内容简直太简单了。

这工作,但似乎有点笨拙:

char ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(randomNumber); 

我应该怎么办呢?

+0

难道你只是使randomNumber一个字符?这样编译器不会抱怨 – Toad 2009-11-04 14:40:14

+0

无论如何,编译器都会抱怨,因为+运算符产生一个你必须施加的int。 – 2009-11-04 16:33:09

回答

1

该问题源于试图将int分配到char

由于一个int是32位和char是16位,分配一个int可以潜在地导致精度的损失,因此,被显示在编译时的错误消息。

1

如果你知道你要在适当的范围内,只投:

char ch = (char) ('A' + randomNumber); 
+0

谢谢,这似乎是得到我想要的最干净的方式,所以它一目了然显而易见它正在做什么。 – Griff 2009-11-06 11:23:40

6

char ch = (char) (new Random().nextInt('Z' - 'A' + 1) + 'A')

您可以通过任何字符替换“A”和“Z”你想实现更广泛的范围。

0

这个怎么样?丑铸造但没有编译错误。应该生成一个随机的大写字母:

int rand = (int) (Math.random() * 100); 
int i = 65 + (rand % 26); 
char c = (char) i; 
System.out.println(c);