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 ......

Author: Community, 2015-08-17

5 answers

Voici la solution Java-8:

new Random().ints('a', 'z'+1).distinct()
            .limit(7).forEach(ch -> System.out.println((char)ch));
 3
Author: Tagir Valeev, 2015-08-17 06:06:37

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));
 0
Author: Sharon Ben Asher, 2015-08-17 06:00:35

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());
 0
Author: Santanu Sahoo, 2015-08-17 06:01:14

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

 0
Author: MadProgrammer, 2015-08-17 06:06:25

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

 0
Author: hermit, 2015-08-17 06:09:43