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 :

Fonction .split par rapport à un nombre donné


Sujet :

avec Java

  1. #1
    Membre habitué

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 189
    Points
    189
    Par défaut Fonction .split par rapport à un nombre donné
    Bonjour,

    Alors désolé pour le titre je savais pas du tout comment intituler ma demande d'aide.

    Alors je me suis donné un exercice à faire et j'avoue ne pas savoir comment mettre en application mon propre exercice...

    Voila j'ai 3 couleurs (Bleu, Blanc, Rouge), je souhaiterais entrer un nombre (par exemple 8) en suite je veux que l'application repartisse 8, aléatoirement parmi les couleurs (exemple de résultat "bleu
    bleu
    bleu
    bleu
    blanc
    blanc
    blanc
    rouge")

    Voici ce que j'ai déjà fait :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.util.Random;
    import java.util.Scanner;
     
     
    	public class NumberBall {
    		public static void main(String args[]) {
     
    			String[] splitArray = null;
    			String str = "Bleu,White,Red";
    			String nombre = new String();
     
    			System.out.println("Entrer un nombre");
    			Scanner sc = new Scanner(System.in);
    			nombre=sc.nextLine();
     
     
     
    			splitArray = str.split(","); 
     
     
    			for(int i = 0; i< splitArray.length;i++){
    				int valTab = splitArray.length;
     
    				Random rnd = new Random();
     
    				String colorBall = splitArray[rnd.nextInt(valTab)];
     
    				System.out.println(colorBall);
     
    	  }
    	 }
    	}
    Merci,
    Seb
    Si tienes una pistola puedes robar un banco, pero si tienes un banco puedes robar a todo el mundo.... ¡DESPIERTA!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce que tu veux, si je comprends bien, c'est entrer un nombre, et choisir, autant de fois que ce nombre, une chaîne dans une liste de chaînes (des couleurs dans ton cas).

    Déjà, si tu veux entrer un nombre, pourquoi lire une String ? Lis un nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nombre = scanner.nextInt();
    Ensuite, si tu veux générer "nombre" chaînes, c'est ce nombre qui doit servir de borne dans la boucle i, pas le nombre de choix possibles.

    Pourquoi partir d'une chaîne et en faire un split ? Pourquoi ne pas créer un tableau directement ? A moins, qu'il ne s'agisse d'un paramètre lu dans un fichier par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] splitArray = {"Bleu","Blanc","Rouge"};

    Pourquoi écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String nombre = new String();
    System.out.println("Entrer un nombre");
    Scanner sc = new Scanner(System.in);
    nombre=sc.nextLine();
    Et pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.out.println("Entrer un nombre");
    Scanner sc = new Scanner(System.in);
    String nombre=sc.nextLine(); // que tu remplaceras par ce que je t'ai suggéré ci-avant
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String[] splitArray = null;
    String str = "Bleu,White,Red";
    splitArray = str.split(",");
    Et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String str = "Bleu,White,Red";
    String[] splitArray = str.split(",");
    C'est comme rnd, tu peux le créer en dehors de ta boucle (avant), et pas besoin de valTab, tu peux utiliser directement splitArray.length en argument de Random.nextInt().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 189
    Points
    189
    Par défaut
    Alors, au lieu de me donner les couleurs il m'a sortie des numéros, la je sais plus trop ou j'en suis..

    Quand je mets rnd avant ça va pas non plus.

    dois-je créer une méthode ?

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.util.Random;
    import java.util.Scanner;
     
     
    	public class NumberBall {
    		public static void main(String args[]) {
     
    			String[] splitArray = {"Bleu","Blanc","Rouge"};
     
    			System.out.println("Entrer un nombre");
    			Scanner sc = new Scanner(System.in);
    			int nombre=sc.nextInt(); 
     
     
     
     
    			for(int i = 0; i< splitArray.length;i++){
     
     
    				Random rnd = new Random();
    				String colorBall = rnd.nextInt(splitArray.length);
     
    				System.out.println(colorBall);
     
    	  }
    	 }
    	}
    Merci Joel,
    Si tienes una pistola puedes robar un banco, pero si tienes un banco puedes robar a todo el mundo.... ¡DESPIERTA!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par trentks95 Voir le message
    Alors, au lieu de me donner les couleurs il m'a sortie des numéros, la je sais plus trop ou j'en suis..
    M'enfin, je n'ai jamais écrit qu'il fallait enlever la récupération de la chaîne dans le tableau, la partie surlignée là String colorBall = splitArray[rnd.nextInt(valTab)];, enfin, je n'ai pas l'impression...

    Cela ne risque pas de compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String colorBall = rnd.nextInt(splitArray.length);
    nextInt retourne un int, pas une String.

    Et je t'ai dit de faire une boucle sur nombre, pas sur splitArray.length. Cela voulait dire for(int i = 0; i< nombre;i++) au lieu de for(int i = 0; i< splitArray.length;i++){.

    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
    18
    19
    20
    import java.util.Random;
    import java.util.Scanner;
     
    public class NumberBall {
        public static void main(String args[]) {
     
            String[] splitArray = {"Bleu","Blanc","Rouge"};
     
            System.out.println("Entrer un nombre");
            Scanner sc = new Scanner(System.in);
            int nombre=sc.nextInt(); 
     
    	Random rnd = new Random();	 
    	for(int i = 0; i< nombre; i++){ 
    	    String colorBall = splitArray[rnd.nextInt(splitArray.length)]; // ici on pourrait même se passer de la variable colorBall
                System.out.println(colorBall);
            }
        }
     
    }
    Tout simplement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre habitué

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 189
    Points
    189
    Par défaut
    Effectivement J'ai un peu mal compris..

    Là c'est nickel, dernières chose qui n'était pas prévu, y t'il possibilité qui me les sortes dans l'ordre du tableau splitArray ?

    Seb
    Si tienes una pistola puedes robar un banco, pero si tienes un banco puedes robar a todo el mundo.... ¡DESPIERTA!

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par trentks95 Voir le message
    Là c'est nickel, dernières chose qui n'était pas prévu, y t'il possibilité qui me les sortes dans l'ordre du tableau splitArray ?
    C'est possible, mais... Les systèmes de tris en Java sont fondés sur la notion de relation d'ordre (un élément est plus grand ou plus petit qu'un autre), donc sur la notion de comparaison. Imposer un ordre déterminer est possible en faisant une conversion valeur vers index de la valeur, puis on peut faire un tri sur la relation d'ordre entre index. Mais c'est un peu plus compliqué qu'un simple tri avec comparateur et c'est en plus assez peu performant dans le cas général (là, on a que trois valeurs, donc ce n'est pas si gênant que ça), ou alors il faudrait introduire une map, donc complexifier encore un peu plus).
    Il y aurait bien la solution par enum, car on aurait l'association d'un nom et d'un nombre, donc une relation d'ordre. Mais ce n'est valable que pour une liste finie, fixée dans le programme. Pas de dynamique possible.

    Pour gérer la problématique dans le cas général, j'opterais pour une approche différente. S'il faut que les valeurs soit triées, l'algorithme consiste en fait à choisir trois valeurs dont la somme est égale au nombre, soit dans le cas général, des valeurs jj telles que, pour n le nombre saisi au clavier et m le nombre de choix, la somme des jj soit égale à n, 0≤j<m et 0≤j<n.
    Ensuite, il suffit de faire un boucle pour chaque valeur et d'afficher le choix correspondant.

    Pour déterminer les ij (soit le nombre de valeurs choisie pour le choix j), on peut soit déterminer x ij par random jusqu'à ce qu'on ait atteint mais pas dépasser n, et on corrige ou compense à la fin, mais on n'aura pas une répartition équiprobable. Une approche serait simplement de tirer des indexes et d'incrémenter des compteurs.

    Je te donne le début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String[] splitArray = {"Bleu","Blanc","Rouge"};
     
    System.out.println("Entrer un nombre");
    Scanner sc = new Scanner(System.in);
    int nombre=sc.nextInt(); 
     
    int[] compteur = new int[splitArray.length]; // un compteur pour chaque choix possible
    Il te faudra 2 boucles, une simple pour les tirages, puis une double pour l'affichage du résultat...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre habitué

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Points : 189
    Points
    189
    Par défaut
    Merci Joel, je vais méditer là-dessus.

    Bonne soirée,

    Seb
    Si tienes una pistola puedes robar un banco, pero si tienes un banco puedes robar a todo el mundo.... ¡DESPIERTA!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/10/2008, 10h59
  2. Réponses: 2
    Dernier message: 07/03/2008, 15h39
  3. [Conception] Performances par rapport à un nombre élevé de requêtes INSERT
    Par phicarre dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/01/2008, 12h03
  4. RegExp : optimalité d'un split par rapport à un group
    Par oc_alex86 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/12/2007, 20h17
  5. Réponses: 2
    Dernier message: 15/06/2006, 10h30

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