2009-11-04 3 views
2

Je veux obtenir une lettre au hasard en utilisant quelque chose commeComment obtenir une lettre au hasard en Java?

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

Mais qui donne erreur de compilation « perte de précision » (même si randomNumber est seulement un octet). Je suppose qu'avec Unicode ce qui précède est une simplification grossière.

Cela fonctionne, mais semble un peu maladroit:

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

Comment dois-je faire?

+0

ne pourriez-vous pas simplement rendre randomNumber un char? De cette façon, le compilateur ne se plaindra pas – Toad

+0

Le compilateur se plaint de toute façon, car l'opérateur + produit un int que vous devez lancer. –

Répondre

1

Le problème provient de la tentative d'affectation d'un int à un char.

Depuis un int est de 32 bits et char est 16 bits, l'attribution d'un int peut potentiellement conduire à une perte de précision, d'où le message d'erreur est affiché au moment de la compilation.

1

Si vous savez que vous allez être dans la gamme appropriée, juste jeté:

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

Merci, cela semble être le moyen le plus propre d'obtenir ce que je veux donc il est évident en un coup d'œil ce qu'il fait. – Griff

6

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

Vous pouvez remplacer « A » et « Z » par un caractère que vous voulez atteindre une plus large gamme.

0

Que pensez-vous de cela? Coulée laide mais pas d'erreurs de compilation. Devrait générer une lettre majuscule aléatoire:

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