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

Collection et Stream Java Discussion :

Comparer une valeur int au autre valeur int d'un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut Comparer une valeur int au autre valeur int d'un tableau
    Bonjour à tous. J’ai créé un tableau multidimensionnel de 3 par 3 cases dans laquelle, j’ai réussi à y mettre des nombres aléatoires. Là, j’essaye de trouver un moyen de comparer le nombre qui est mis dans le tableau avec la totalité des nombres déjà dans le tableau. Mon objectif est qu’il n’y est aucun nombre identique. Je ne veux pas le code, mais de l’aide pour comprendre comment le faire. Merci d’avance.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import java.util.Random;
     
    public class MainTeste {
     
    	int nbrAleatoire;
    	int valeur;
    	int[][] grille;
     
    	static int ligne=0;
    	static int colonne=0;
    	static int ligne2=0;
    	static int colonne2=0;
     
    	public static void main(String[] args) {
     
    	System.out.println("salut");
    	int grille[][] = new int[3][3];
     
    	while(ligne2<3)
    	{
    		while(colonne2<1)
    		{
    			for(int x=0; x<grille.length; x++)
    			{
    				for(int y=0; y<grille.length; y++)
    				{
    					Random nbrAleatoire = new Random();
    					int valeur = 1 + nbrAleatoire.nextInt(9);
    					grille[x][y] = valeur;
    				}
    				ligne2++;
    			}
    			colonne2++;
    		}
    	} 
     
    	System.out.println("valeur dans la case:"+grille[1][1]);
     
    	while(ligne<3)
    	{
    		while(colonne<1)
    		{
    			for(int i=0; i<grille.length; i++)
    			{
    				for(int j=0; j<grille.length; j++)
    				{
    					System.out.print("|case:"+grille[i][j]+"|");
    				}
    				System.out.println("");
    				ligne ++;
    			}
    			System.out.println("");
    			colonne ++;
    		}
     
    	}
     
     
    	}
    }

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour chaque valeur aléatoire que tu cherches à mettre dans le tableau, il te faut juste parcourir la partie du tableau déjà remplie pour comparer les valeurs qui s'y trouvent avec cette valeur aléatoire. Tant qu'elle est trouvée, tu retires une nouvelle valeur aléatoire (tu peux utiliser un do/while par exemple).

    Pour parcourir le tableau déjà rempli, il te suffit d'utiliser les indices de parcourt courant pour le remplir : x, le numéro de ligne courante et y le numéro de colonne courant. Tu parcours toutes les lignes sauf la ligne x entièrement (donc comme tu fais pour remplir), et tu parcours la ligne x de 0 à y-1. Tu peux faire une méthode pour faire la recherche (qui retourne un boolean pour indiquer que la valeur est trouvée). Pense que lorsque tu as trouvé la valeur, il est inutile de continue de parcourir le reste du tableau.

    Il y a une autre approche beaucoup plus efficace : comme tu remplis un tableau de 9 valeurs (3x3) avec les chiffres de 1 à 9. Tu peux remplir une liste de 9 valeurs de 1 à 9 (List<Integer>), puis de mélanger la liste (Collections.shuffle(List)), puis de simplement parcourit cette liste pour placer ses éléments dans le tableau (un seul parcourt du tableau, ou un seul parcourt de la liste).

    Par ailleurs quelques remarques/questions :

    1. A quoi serve ces boucles while :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      while(ligne2<3)
      {
          while(colonne2<1)
              {
      (idem pour celle sur ligne/colonne)
      Ces boucles ne servent à rien, parce que de toute manière, une seule itération est faite (elle t'oblige juste à avoir 4 variables en plus)
    2. Attention, pour le parcourt de tableau quand tu fais ça :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      for(int x=0; x<grille.length; x++) {
      				for(int y=0; y<grille.length; y++) {
      Ici, ça fonctionne parce que le nombre de lignes et le nombre de colonnes sont égaux. Dans le cas général, il faut faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      for(int x=0; x<grille.length; x++) {
      				for(int y=0; y<grille[x].length; y++) {
      Une habitude à prendre pour éviter les exceptions le cas échéant.
    3. Il est inutile de créer une instance de Random à chaque itération : une seule suffit, que tu peux utiliser plusieurs fois (la créer avant de commencer à boucler)
    4. tu déclares le tableau grille en variable de classe et en variable locale (idem pour valeur et nbrAleatoire) : ceux de la classe ne sont pas utilisés (ils ne pourraient pas de toute manière être utilisés directement dans la méthode statique main(), car non statique)
      Les trois variables suivantes ne servent à rien, autant les enlever
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      int nbrAleatoire;
      	int valeur;
      	int[][] grille;
    5. tu devrais noter tes déclarations te tableau comme ça :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int[][] grille = new int[3][3];
      au lieu de
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int grille[][] = new int[3][3];
      Plus courant en Java et plus logique aussi, même si les 2 notations sont acceptées par le compilateur.
    6. on peut écrire System.out.println(); au lieu de System.out.println(""); : ça fait la même chose.
    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
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Billets dans le blog
    55
    Par défaut
    Citation Envoyé par mathieupicard Voir le message
    Je ne veux pas le code, mais de l’aide pour comprendre comment le faire. Merci d’avance.
    alors là ... +1
    un débutant qui a la méthode
    Développeur Java
    Site Web

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    La solution de @joel.drigo est correcte. Mais il est possible d'aborder le problème de plusieurs manière pour obtenir un résultat similaire.

    1. Approche par liste de nombre disponible au remplissage.
    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
    		// construction de la liste des nombre qu'on a le droit de prendre
    		List<Integer> disponible = new ArrayList<Integer>();
    		for (int i = 1; i < 10; i++) {
    			disponible.add(new Integer(i));
    		}
     
    		int table[] = new int[disponible.size()];
    		Random nbrAleatoire = new Random();
    		// Remplissage
    		for (int i = 0; i < table.length; i++) {
    			int indexNuNombreAPrendre =nbrAleatoire.nextInt(disponible.size());
    			table[i]= disponible.get(indexNuNombreAPrendre);
    			disponible.remove(indexNuNombreAPrendre);
    		}
    		// Affichage du résultat
    		System.out.println(Arrays.toString(table));
    		System.out.println("Tailles de la liste des disponibles : "+disponible.size());
    2. Approche par remplissage simple, puis mélange (Exemple avec le shuffe de collections):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		int table[] = new int[9];
    		// Remplissage
    		for (int i = 0; i < table.length; i++) {
    			table[i]=i+1;
    		}
    		// Conversion int[] to List<Integer> using Java 8 API
    		List<Integer> list = IntStream.of(table).boxed().collect(Collectors.toList());
     
    	    Collections.shuffle(list);
    	    //Conversion  List<Integer> to int[] using Java 8 API
    		table = list.stream().mapToInt(i -> i).toArray();
    		// Affichage du résultat
    		System.out.println(Arrays.toString(table));
    Ce code étant là pour poser les bases d'idées de constructions.

    Cordialement,
    Patrick Kolodziejczyk.

    Edit : Le sujet de font étant intéressant, j'ai fait un petit billet : [Java8][Stream] Comment créer une matrice mélangé !
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Je veux remercier tout le monde qui ont pris le temps de répondre. J'ai fait les correctif que tu m'as dit joel.drigo. Kolodz, je n'ai pas encore tester le code que tu m'as donné. Je veux commencer par le comprendre, car je suis pas encore rendu la dans mon apprentissage autodidacte. Ma véritable formation de programmation en java ne commencera pas avant la session d'hiver 2016 à l'université.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/09/2014, 22h05
  2. [Toutes versions] Remplacement valeur champ par autre valeur
    Par Aladin_23 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/08/2012, 17h52
  3. Réponses: 8
    Dernier message: 06/08/2009, 19h01
  4. Réponses: 8
    Dernier message: 16/08/2007, 16h28
  5. Réponses: 3
    Dernier message: 24/07/2007, 21h27

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