2009-11-04 5 views
2

Я хочу, чтобы получить случайное письмо, используя что-то вродеКак получить случайное письмо в Java?

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

Но что дает «потери точности» ошибка компиляции (то же самое, если randomNumber только один байт). Я предполагаю, что с помощью Unicode приведенное выше грубое упрощение.

Это работает, но кажется немного неуклюжей:

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

Как я должен это сделать?

+0

Не могли бы вы просто сделать randomNumber char? Таким образом, компилятор не будет жаловаться – Toad

+0

Компилятор все равно жалуется, потому что оператор + создает int, который вы должны выполнить. –

ответ

1

Проблема возникает из-за попытки присвоить int в char.

Поскольку int имеет длину 32 бита и char составляет 16 бит, назначив int потенциально может привести к потере точности, следовательно, сообщение об ошибке отображается во время компиляции.

1

Если вы знаете, что вы собираетесь быть в соответствующем диапазоне, просто отбрасывать:

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

Спасибо, это, кажется, самый чистый способ получить то, что я хочу, так что сразу видно, что он делает. – Griff

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);