IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Générer une suite de string aléatoire sans doublon


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Générer une suite de string aléatoire sans doublon
    Bonjour/Bonsoir à tous,

    Suite à mon précédent message (https://www.developpez.net/forums/d2...-liste-string/), je souhaiterais améliorer le programme pour qu'il n'y est pas de doublon dans les couleurs.
    En effet, avec le code ci-dssous, j'arrive à générer un tableau de 4 String depuis le tableau couleur mais je n'arrive pas à comprendre comment faire pour éviter les doublons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import java.util.Arrays;
     
    public class ListeString{
     
         public static void main(String []args){
     
            String couleur[] = {"Rouge", "Jaune", "Bleu", "Orange", "Blanc", "Violet", "Fuchsia"};
            String tab[] = new String[4];
     
     
            for (int i=0; i < 4; i++){
                int nbAlea = (int) (Math.random() * couleur.length);
                tab[i] = couleur[nbAlea];
            }
            System.out.print(Arrays.toString(tab));
         }
    }
    Existe-t-il une méthode Array et/ou Math.random dans Java pour cela ? Doit-on comparer les indices [i] entre eux ?
    D'avance merci.

    Cordialement,

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Il n'y a pas de méthode directe, mais disons que c'est assez proche de ce que fait Collections.shuffle().

    Il mélange aléatoirement les éléments d'une List, mais finalement c'est la même chose que de sélectionner aléatoirement autant d'éléments de cette liste qu'il y en a dans cette liste, sans doublon.

    Du coup une solution serait de mélanger et de ne garder que les 4 premiers.

    Une autre solution, pour le coder soi-même, serait de faire comme si on mélangeait, mais de s'arrêter quand on en a le nombre voulu :

    - copier les éléments dans une ArrayList qu'on peut modifier
    - sélectionner aléatoirement l'élément qu'on veut en index zéro. Échanger cet élément avec celui en index zéro.
    - sélectionner aléatoirement l'élément qu'on veut en index 1 (en ne choisissant donc, qu'à partir de l'index 1). Échanger cet élément avec celui en index 1.
    - sélectionner aléatoirement l'élément qu'on veut en index 2 (en ne choisissant donc, qu'à partir de l'index 2). Échanger cet élément avec celui en index 2.
    - et ainsi de suite jusqu'au nombre voulu
    - copier les éléments sélectionnés, dans une List de la bonne taille (éviter de juste garder subList(0, 4) car cela n'est qu'une vue de la liste entière, la liste entière est donc gardée en mémoire pour que cette vue puisse exister.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/01/2009, 12h00
  2. Réponses: 2
    Dernier message: 27/05/2007, 22h23
  3. Nombre aléatoire sans doublon
    Par Ardely dans le forum Delphi
    Réponses: 9
    Dernier message: 01/03/2007, 21h54
  4. [MySQL] Sélection aléatoire sans doublon
    Par krapoulos2006 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/12/2006, 16h46
  5. Réponses: 8
    Dernier message: 02/12/2005, 18h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo