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 :

Répétition dans un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Par défaut Répétition dans un tableau
    Bonsoir j'essaye de faire un programme qui renvoie true si t ne contient pas deux fois la même valeur, mais mon programme me renvoie false alors qu'il devrait mettre true, voici mon code

    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
     
    public static boolean noRepetition(int [] t){
    		boolean res=false;
    		int x=0;
    		for (int i=0;i<t.length;i++){
    			x=t[i];
    			if (x!=t[i]){
    				res= true;
    			}else{
    				res=false;
    			}
    		} return res;
    	}
     
     public static void main (String [] args){
    		int tab []={23,-372,3,30,2};
    		System.out.print(noRepetition(tab));
     
     
    	}
    Merci de bien vouloir m'aider

  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,

    Je te décris ce que ton code fait à chaque itération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x=t[i]; // on dit que la valeur de x, c'est la valeur dans t[i]
    if (x!=t[i]){ // si la valeur de x  n'est pas celle de t[i], ce qui est forcément faux (puisqu'on vient juste de mettre justement la valeur de t[i] dans x !!!)
        res= true; // alors c'est true (ce code ne sera jamais exécuté, puisque x sera toujours t[i], donc jamais différent de t[i]
    }else{
       res=false; // sinon on dit que c'est false, donc normal que ta méthode retourne toujours false;
    }
    Le x=t[i], pourquoi pas (ce n'est pas indispensable), mais ensuite, tu dois juste faire une boucle (à l'intérieur de l'autre), pour parcourir les t[j], tel que j>i (et j<t.length évidemment), et faire la comparaison entre t[i] ou x, avec chacun de ces t[j]. Dès que tu en trouves un qui est égal (dès que t[j]==t[i], ou t[j]==x si tu veux) alors il y en a 2 qui ont la même valeur (là tu peux mettre ton ret à true). Il ne faut surtout pas mettre ret à false dans le cas contraire, sinon l'itération suivante, même si tu as trouvé 2 valeurs égales, si la suivante ne l'est pas ça va repasser ret à false, et c'est comme si ça n'avait jamais trouvé de valeurs égales. On peut optimiser par la suite le code, pour que dès que 2 valeurs égales (t[i]==t[j]) ont été trouvées, on arrête les 2 boucles. Mais ça, fais le plus tard, quand tu auras fait fonctionner la méthode sans optimisation.
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static boolean noRepetition(int [] t){
     
    		for (int i=0;i<t.length;i++){
    			for (int j=0;j<t.length;j++){
    				if (t[i]==t[j])
    					return false;
    			}
    		} return true;
    	}
    j'ai améliorer le code, mais la fonction ne fonctionne toujours pas, je comprend pas quand tu dis parcourir les t[j], tel que j>i

  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 : 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
    Le but est de déterminer si 1 valeur est en double dans le tableau (enfin, l'inverse, mais ça revient à ça, et a inverser le résultat).
    Donc on va tester toutes les valeurs du tableau, et regarder si l'une des autres valeurs est égales. Pour tester toutes les valeurs, on parcourt le tableau : ce que fait ton premier for. Ensuite, il s'agit de tester toutes les autres valeurs, donc il faut les parcourir, ce qui sera fait par le second for.
    Ce qu'on pourrait faire comme ça :
    Ce qu'on peut faire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int j=0; j<t.length; j++) {
       if ( i!=j ) { // c'est la seule chose qui manque pour ta méthode fonctionne : dans ton cas, comme t[i]==t[j] forcément, quand i==j, ta méthode retourne toujours false
           //...
       }
    }
    Mais on peut aller un peu plus vite, en évitant de faire plusieurs fois les mêmes comparaisons. Quand on traite la première valeur (i vaut 0), on parcourt donc les valeurs qui se trouve après la première (il n'y en a pas avant.
    Ce qu'on peut faire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int j=i+1; j<t.length; j++) {
    }
    Lorsqu'on teste la deuxième valeur (i vaut 1), on parcourt les valeurs avant puis après la deuxième. Donc on parcourt [c]for(int j=0;j<1; j++){/c] pour comparer donc t[j=0] avec t[i=1]. Seulement, lors de la première itération, on a déjà comparer t[i=0] avec t[j=1], ce qui est exactement la même comparaison. Si celle-ci avait été vraie, on serait sorti de la méthode en retournant false. Si on est encore en train d'exécuter, c'est que les valeurs sont différentes, or, ce qui nous intéresse c'est quand elles sont égales : non seulement on a déjà fait le test, mais en plus on sait que son résultat ne nous interesse pas. Donc on ne va le faire, et parcourir seulement les valeurs après la deuxième valeur, par for(int j=i+1; j<t.length;j++), ce qui correspond exactement au for pour i==1.
    Si tu fais la même réflexion pour la troisième valeur, tu verras que c'est pareil : toutes les tests pour les valeurs précédant la troisième ont déjà été fait, on peut donc ne tester que les suivantes, avec toujours ce for for(int j=i+1; j<t.length;j++).
    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.

Discussions similaires

  1. Compter nombre de répétitions des valeurs dans un tableau
    Par tabrouri2000 dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 21/03/2021, 20h47
  2. Réponses: 7
    Dernier message: 01/01/2013, 18h03
  3. [Débutant] nombre de répétitions dans un tableau
    Par bil's dans le forum MATLAB
    Réponses: 20
    Dernier message: 18/07/2012, 13h49
  4. [WD-2003] Saut de page dans un tableau avec répétition des entetes
    Par shawn12 dans le forum VBA Word
    Réponses: 3
    Dernier message: 27/08/2010, 01h00
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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