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 :

Tri de tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut Tri de tableau
    Bonjour;
    Je suis un grand novice en Java, je galère d'abord avec les fonctions et là j'ai un problème, je viens de coder un petit programme pour trier un tableau;
    mais le problème et que le code ne s’exécute pas, j'ai plein des erreurs mais j'ai du mal à les identifiant, je pense surtout les fonctions sont mal formulée, merci à l'avance pour votre aide.

    voici le 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public class triS {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int tab[] = {40,60,30,20,50};
     
    		triSelection(temp,tab[] );	
     
    	}
     
    }
     
    public static void in []triSelection(int temp, int tab[]){
     
     
    	int minimum;
     
    	for(i=0, i<tab.length; i++){
    		minimum=i; 
    		temp=tab[i];
    		tab[i]=tab[i+1];
    		tab[i+1]=temp;
     
    		System.out.println(tab[i]);
    	}
    	return tab[i];
    }
     
     
    }

  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,

    Il faut respecter la syntaxe si tu veux pouvoir compiler et donc exécuter. Commentaires dans ton 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public class triS {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int tab[] = {40,60,30,20,50};
     
    		triSelection(temp,tab[] );	// 1 la variable temp n'existe pas
                                                            // 2 on référence une variable par son nom, et le nom de la variable tab c'est tab, pas tab[]
     
    	}
     
    } // 3 cette accolade fermante n'a rien à faire ici
     
    public static void in []triSelection(int temp, int tab[]){ // 4 le type in n'existe pas, c'est int
     
     
    	int minimum;
     
    	for(i=0, i<tab.length; i++){ // 5 la variable i n'est déclarée nulle part : toute variable doit être déclarée (avec son type)
    		minimum=i; 
    		temp=tab[i];
    		tab[i]=tab[i+1];
    		tab[i+1]=temp;
     
    		System.out.println(tab[i]);
    	}
    	return tab[i]; // 6 le retour de la méthode triSelection est un tableau et là tu retournes un élément de tableau (un int donc)
    }
     
     
    }
    1. On doit déclarer toute variable qu'on utilise, en indiquant son type et son nom au minimum ;
    2. tu devrais déclarer tes tableaux par la syntaxe int[] tab; ; ainsi le nom de la variable est bien distinct du type, et tu n'auras pas la tentation d'utiliser tab[], qui ne te servira plus jamais (attention tab[i] c'est autre chose, c'est un élément du tableau, en position i).
    3. Il doit y avoir autant de { que de } ;
    4. plus que la syntaxe, les mots doivent être en entier et bien orthographiés : normalement, les messages sont clairs dans ton IDE pour t'indiquer ce genre d'erreur.
    5. la variable i doit être déclarée : par exemple for(int i=0...
    6. int[] est un tableau de int, donc pas un int (alors que tab[i] est un int)


    Ensuite, il y a pas mal de choses à dire sur ton algorithme lui-même, mais je te laisse travailler ça. Juste deux ou trois remarques :

    • actuellement tu ne fais qu'une seule boucle qui échange une valeur avec sa suivante (ce qui ne trira rien du tout) : pense que le dernier élément du tableau n'a pas de suivant !
    • la variable temp ne sert qu'à échanger 2 valeurs consécutives : elle devrait être déclarée juste à l'endroit où on s'en sert et surtout ne pas être un paramètre de la méthode.
    • à quoi sert minimum : c'est uniquement la copie de i à chaque itération
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut
    Merci beaucoup, c'est corrigé et le programme marche;

    J'ai essayé de le faire autrement soit le tableau est remplie par l'utilisateur, lors de la compilation il n' y a pas d'erreur mais, le programme s’exécute à moitié, dès que l'utilisateur atteint la saisie des nombres des valeurs, il y a une erreur d'exception qui s'affiche la partie de tri ne s'affiche pas.


    Voici le code suivi de l'affichage après l’exécution:

    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
    import java.util.Scanner;
     
    public class triParSelection {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int SIZE;
    		int [] tab = new int[6];
     
    		remplire(tab);
    		trieur(tab);
    	}
     
    	public static int[] remplire(int tab[]){
    		int i;
    		Scanner sc=new Scanner(System.in);
     
    		for( i=0; i < tab.length; i++){
     
    		System.out.println("Entrer la "+(i+1)+"ème valeur du tableau : ");
    		tab[i] = sc.nextInt();
     
     
    		}
    		System.out.println(tab[i]);
     
    		return tab;
    	}
     
    	public static int []trieur(int tab[]){
     
    		for(int i=0; i < tab.length; i++){
     
    			int minimum=i;
     
    			for(int j=i+1; j < tab.length; j++){
     
    				if(tab[j]> tab[minimum]){
    					minimum = j;
    				}
     
    				if(minimum!=i){
    					int temporaire = tab[i];
    					tab[i] = tab[minimum];
    					tab[minimum] = temporaire;
    				}
     
    			}
    			System.out.println(tab[i]);
    		}
    		return tab;
     
    	}
     
    }

    Voici l'exécution avec l'erreur:

    Entrer la 1ème valeur du tableau :
    5
    Entrer la 2ème valeur du tableau :
    24
    Entrer la 3ème valeur du tableau :
    87
    Entrer la 4ème valeur du tableau :
    5
    Entrer la 5ème valeur du tableau :
    26
    Entrer la 6ème valeur du tableau :
    2

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at triParSelection.remplire(triParSelection.java:25)
    at triParSelection.main(triParSelection.java:10)

    Une dernière question, j'ai essayé de faire que c'est l'utilsateur qui saisie la taille du tableau, mais la aussi je bute, on me dit de l'initilisé mais quand je l'initialise en le donnant par exemple 0, le programme n'affiche que des zero, le code est le suivant:
    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
    import java.util.Scanner;
    
    public class triParSelection {
    
    	public static void main(String[] args) {
    
    		// L'erreur se trouve à cet endroit
                    
    		int SIZE; 
    		int [] tab = new int[SIZE];
    		
    		remplire(tab);
    	}
    	
    	public static int[] remplire(int tab[]){
    		
    		Scanner sc=new Scanner(System.in);
    		
    		for(int i=0; i < tab.length; i++){
    			
    		System.out.println("Entrer le nombre des valeur :");
    		int SIZE = sc.nextInt();
    			 
    		while(i < SIZE){
    			System.out.println("Entre la valeur de la "+(i+1)+" ème colone :");
    			tab[i] = sc.nextInt();
    		}
    		System.out.println(tab[i]);
    		}
    		return tab;
    	}
    
    }

  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
    La première erreur vient de l'affichage que tu fais après la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int i;
    Scanner sc=new Scanner(System.in);
     
    for( i=0; i < tab.length; i++){
     
       System.out.println("Entrer la "+(i+1)+"ème valeur du tableau : ");
       tab[i] = sc.nextInt();
     
     
    }
    System.out.println(tab[i]);
    En effet, dans la boucle, si le tableau fait 6 valeurs par exemple, i prend successivement les valeurs 0, 1, 2, 3, 4, 5, 6 et là i<tab.length est faux donc on sort de la boucle, et on essaye d'afficher tab[6] qui n'existe pas, et paf, exception !

    si le but est d'afficher le tableau pour vérifier que la saisie à fonctionner fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Scanner sc=new Scanner(System.in);
     
    for( int i=0; i < tab.length; i++){ // déclare ta variable i dans le for, comme ça pas de risque que tu l'utilises en dehors
     
       System.out.println("Entrer la "+(i+1)+"ème valeur du tableau : ");
       tab[i] = sc.nextInt();
     
     
    }
     
    System.out.println(Arrays.toString(tab)); // affiche tout le tableau



    Pour la seconde erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class triParSelection {
     
    	public static void main(String[] args) {
     
    		// L'erreur se trouve à cet endroit
     
    		int SIZE; 
    		int [] tab = new int[SIZE];
     
    		remplire(tab);
    	}
    on ne peut pas utiliser SIZE pour dimensionner le tableau, parce que SIZE n'a pas de valeur ! C'est avant de dimensionner le tab que tu dois demander à l'utilisateur de saisir la valeur...

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i=0; i < tab.length; i++){
     
    		System.out.println("Entrer le nombre des valeur :");
    		int SIZE = sc.nextInt();
    Tu vois bien qu'il y a un problème de logique : tu itères sur chaque élément d'un tableau et pour chacun des éléments tu demandes le nombre d'éléments de ce tableau.

    Fais plutôt :
    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
     
    import java.util.Scanner;
     
    public class triParSelection {
     
    	public static void main(String[] args) {
     
    		int [] tab = remplire();
                    System.out.println(Arrays.toString(tab));
     
    	}
     
    	public static int[] remplire(){
     
    		Scanner sc=new Scanner(System.in);
     
    		System.out.println("Entrer le nombre des valeur :");
    		int size= sc.nextInt();
     
                    int[] tab = new int[size];
     
    		for(int i=0; i < tab.length; i++){
     
    			System.out.println("Entrer la valeur de la "+(i+1)+" ème colone :");
    			tab[i] = sc.nextInt();
    		}
     
    		return tab;
    	}
     
    }
    Attention : il n'y a aucun contrôle de saisie. C'est peut-être voulu, ou pas demandé pour l'exercice... mais sinon, il faudra vérifier que l'utilisateur saisi bien des nombres (Scanner.hasNextInt()) et vérifier que le nombre d'élément est positif ou nul (sinon plantage au dimensionnement du tableau).
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut
    Salut,

    Avant tout je vous remercie énormément Joel.drigo, vos explication son très clair;

    Pour la 2ème question par rapport à la définition de la taille du tableau par l'utilisateur, je m'en doutait il fallait mettre l'initialisation du tableau après la saisie du nombre par l'utilisateur.

    Pour le contrôle de saisie c'est voulue, mais je vais le faire plus tard, pour le moment je maitrise ça d'abord et puis je vais passer à l’étape supérieur .

    Pour la première question, plus d'exception mais c'est juste le tri se fait pas correctement, un petit souci au niveau du 2eme et le 3eme chiffres, l'algorithme je l'ai tester a part sans la fonction de saisie, ça marche.

    Voici le resultat:

    Entrer la valeur numero 1 du tableau :
    90
    Entrer la valeur numero 2 du tableau :
    80
    Entrer la valeur numero 3 du tableau :
    10
    Entrer la valeur numero 4 du tableau :
    40
    Entrer la valeur numero 5 du tableau :
    60
    0
    ===============================================
    10
    60
    40

    80
    90

    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
    import java.util.Scanner;
     
    public class triParSelection {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int SIZE;
            int [] tab = new int [6];
     
            remplire(tab);
            trieur(tab);
        }
     
        public static int[] remplire(int tab[]){
            int i;
            Scanner sc=new Scanner(System.in);
     
            for( i=0; i <  tab.length-1; i++){
     
            System.out.println("Entrer la valeur numero "+(i+1)+" du tableau : ");
            tab[i] = sc.nextInt();
     
     
            }
            System.out.println(tab[i]);
            System.out.println("===============================================");
            return tab;
        }
     
        public static int []trieur(int tab[]){
            int temporaire;
            int minimum;
            for(int i=0; i < tab.length-1; i++){
     
                minimum = i;
     
                for(int j=i+1; j < tab.length-1; j++){
     
                    if(tab[j]< tab[minimum]){
                        minimum = j;
                    }
     
                    if(minimum!=i){
                        temporaire = tab[i];
                        tab[i] = tab[minimum];
                        tab[minimum] = temporaire;
                    }
     
     
                }
                System.out.println(tab[i]);    
            }
            return tab;
     
        }
     
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu inverse les données dans ta boucle intérieur. Ca veux dire qu'après l'inversion, tab[minimum] ne pointe plus sur le minimum trouvé mais sur le plus grand des deux. Soit tu fais l'inversion à chaque fois dans ta boucle intérieur, mais faut pas oublier après de faire minimum=i, mais on ne vois pas l'intéret de cette inversion
    soit tu fait cette inversion après avoir trouvé le minimum, et pas pour chaque candidat que tu trouve. Sont après la sortie de ta boucle intérieure.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 69
    Par défaut
    Bonjour Tchize_;

    Je n'ai pas compris qu'et ce que je dois inverser,

    Comme je l'ai mentionné dans mon message, l'algorithme de tri quand je l'isole pour le tester avec tableau pré-remplis, par exemple si je mets int [] tab= {90,30,80,50,20,10} il marche sans problème, c'est pour quoi je n'arrive pas à comprendre qu'est ce qui se passe dans mon programme.

    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
    public static int []trieur(int tab[]){
    		int temporaire;
    		int minimum;
    		for(int i=0; i < tab.length-1; i++){
     
    			minimum = i;
     
    			for(int j=i+1; j < tab.length-1; j++){
     
    				if(tab[j]< tab[minimum]){
    					minimum = j;
    				}
     
    				if(minimum!=i){
    					temporaire = tab[i];
    					tab[i] = tab[minimum];
    					tab[minimum] = temporaire;
    				}
     
     
    			}
    			System.out.println(tab[i]);	
    		}
    		return tab;
     
    	}

  8. #8
    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
    Ce que dit @Tchize_ est de faire

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pour tous les éléments d'index i du premier à l'avant dernier
     
          minimum = i
          pour tous les éléments d'index j de i+1 au dernier
               si l'élément d'index j est plus petit que celui d'index minimum alors
                  minimum = j
               fin si
          fin pour
          si i est différent de minimum alors 
              échanger les éléments d'index i et d'index minimum
          fin si
     
    fin pour

    Ce qui correspond à dire : je cherche le plus petit et je le mets devant tous les autres, puis je refais ce que je viens de faire sur la suite du tableau

    Alors que toi tu fais

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pour tous les éléments d'index i du premier à l'avant dernier
     
          minimum = i
          pour tous les éléments d'index j de i+1 à l'avant dernier
               si l'élément d'index j est plus petit que celui d'index minimum alors
                  minimum = j
               fin si
               si i est différent de minimum alors 
                  échanger les éléments d'index i et d'index minimum
               fin si
          fin pour
     
    fin pour

    En fait le problème que tu as c'est que le

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    si i est différent de minimum alors 
       échanger les éléments d'index i et d'index minimum
    fin si

    est fait à chaque itération, et, en plus, pas entre les valeurs qui sont comparées (on compare tab[j] et tab[minimum] et on échange tab[i] et tab[minimum].

    Prenons un exemple :

    • tab = {90,80,100,40,60}
    • donc minimum = 0
    • puis j = 1
    • on teste tab[j]<tab[minimum], soit 80 < 90 : c'est bien le cas, donc minimum = 1
    • comme minimum != i (1!=0) donc on échange donc tab[i] et tab[minimum], soit tab[0] et tab[1] : {80,90,100,40,60}
    • puis on fait j+1, donc j=2
    • on teste tab[j]<tab[minimum], soit 100 < 90 : ce n'est pas le cas
    • comme minimum != i (1!=0) donc on échange donc tab[i] et tab[minimum], soit tab[0] et tab[1] (les mêmes qu'avant): {90,80,100,40,60} : déjà maintenant on peut se douter d'un problème : on est revenu dans la configuration initiale : l'action de tri a été annulée. Donc si on fait, de par la configuration (par exemple si on avait [10, 0, 20, 20, 20, 20]), un nombre pair d'échanges, on annule tout échange (on fait 4 échanges entre 0 et 10, puis on ne traite plus jamais 10 qui reste devant).
    • ensuite j=3, tab[j]<tab[minimum] 40<80, oui on échange tab[0] et tab[3] : {40, 80, 100, 90, 60} : et là on a un autre problème on échange i et minimum, alors qu'on a comparé j et minimum : on aura forcément une possibilité de faire un échange qu'il ne faudrait pas


    Il y a un second problème dans ton code, c'est que tu ne teste jamais le dernier élément (puisque i comme j varie jusqu'à taille-1 exclu. Donc quelque soit sa valeur, il reste toujours à la fin

    Dans les manières pour déboguer son code, outre un debugger, un moyen simple est d'ajouter des traces pour observer ce qu'il se passe. Par exemple, sur ton 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public static int[] trieur(int tab[]){
    		int temporaire;
    		int minimum;
    		for(int i=0; i < tab.length-1; i++){
     
    			minimum = i;
     
    			System.out.println("Avant minimum="+minimum+" tab[minimum]="+tab[minimum]+" - " + Arrays.toString(tab));
    			for(int j=i+1; j < tab.length-1; j++){
     
    				if(tab[j]< tab[minimum]){
    					System.out.println("   tab["+j+"]<tab["+minimum+"] ("+tab[j]+"<"+tab[minimum]+"): minimum="+j);
    					minimum = j;
    				}
     
    				if(minimum!=i){
    					temporaire = tab[i];
    					tab[i] = tab[minimum];
    					tab[minimum] = temporaire;
    					System.out.println("   Echange tab[minimum="+minimum+"]="+tab[i]+" & tab[i="+i+"]=" + tab[minimum] + " => " + Arrays.toString(tab));
    				}
     
    			}
    			System.out.println("Après minimum="+minimum+" tab[minimum]="+tab[minimum]+" - " + Arrays.toString(tab));
    			//System.out.println(tab[i]);	
    		}
    		return tab;
     
    	}
    Essaye de jouer ce programme avec différentes configurations de tableaux et tu comprendras ce qu'il se passe en regardant chaque étape intermédiaire.
    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. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Problème dans un tri de tableau
    Par pmboutteau dans le forum ASP
    Réponses: 5
    Dernier message: 29/11/2005, 13h12
  3. [Tableaux] tri de tableau
    Par rdams dans le forum Langage
    Réponses: 19
    Dernier message: 08/11/2005, 13h46
  4. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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