Comment sélectionner au hasard 7 lettres (de a à z) en java
Je veux sélectionner 7 lettres aléatoires de a à z
Jusqu'à présent, je n'ai trouvé que des moyens de sélectionner une seule lettre https://stackoverflow.com/a/5202888/3209901
Random r = new Random();
char c = (char) (r.nextInt(26) + 'a');
Pourquoi sept lettres parce que , je dois appliquer certaines conditions à ces 7 lettres - pour vérifier les mots formés par ces sept lettres , la longueur du mot doit être d'au moins 4 lettres ......
5 answers
Voici la solution Java-8:
new Random().ints('a', 'z'+1).distinct()
.limit(7).forEach(ch -> System.out.println((char)ch));
Cette solution ne nécessite aucune boucle et aucun générateur aléatoire. Il produit un List<String>
, avec 7 lettres aléatoires
String[] abArr = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
List<String> abList = Arrays.asList(abArr);
Collections.shuffle(abList);
System.out.println(abList.subList(0, 7));
Essayez ceci
Random rnd = new Random();
final String AB = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
StringBuilder alphabat = new StringBuilder();
for (int i = 0; i < 4; i++){
alphabat.append(AB.charAt(rnd.nextInt(AB.length())));
}
System.out.println(alphabat.toString());
Maintenant, en fonction de ce que vous voulez finalement réaliser, vous pouvez simplement faire quelque chose comme...
Random rnd = new Random();
for (int index = 0; index < 7; index++) {
System.out.println((char)(rnd.nextInt(26) + 'a'));
}
Qui va juste générer 7 caractères aléatoires. Vous pourriez ajouter à un tableau, List
ou StringBuilder
. Vous pouvez également utiliser rnd.nextInt(3) + 4)
pour générer une longueur de mot aléatoire.
Maintenant, si vous ne voulez pas les valeurs en double, vous pouvez utiliser un Set
, quelque chose comme...
Random rnd = new Random();
Set<Character> characters = new HashSet<>();
while (characters.size() < 7) {
characters.add((char)(rnd.nextInt(26) + 'a'));
}
for (Character value : characters) {
System.out.println(value);
}
Qui continuera à tourner en boucle jusqu'à ce que le Set
contienne le nombre de caractères requis (dans ce 7
, mais voir le commentaire précédent pour générer une longueur aléatoire)
Vous pouvez aussi faire quelque chose comme...
List<String> values = new ArrayList<>(Arrays.asList("abcdefghijklmnopqrstuvwxyz".split("")));
Collections.shuffle(values);
List<String> randomValues = values.subList(0, 7);
for (String value : randomValues) {
System.out.println(value);
}
Ce qui aurait plus de sens si la liste de caractères a été générée à partir d'une autre source, mais démontre la méthode Collections.shuffle
Vous pouvez utiliser Set
car il ne stocke aucun élément en double et est donc plus facile à implémenter.
Random r = new Random();
Set <Character>mySet=new <Character>HashSet();
while(mySet.size()!=7){
char c = (char) (r.nextInt(26) + 'a');
mySet.add(c);
}
for(char c:mySet){
System.out.print(c+" ");
}
Output:a q d g i j m