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 :

tri par minimum


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    bordeaux
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : bordeaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Points : 19
    Points
    19
    Par défaut tri par minimum
    Bonjour,

    je dois faire une méthode dans la classe Tableau qui me permette de trié un tableau avec des entiers pris au hasard et de les mettre dans un ordre croissant avec un tri par minimum.

    Quand je compile j'obtiens "Tableau trié : 2@5hk9z6m3.

    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
     
    public class tableaux {
     
        protected static int[] tab;
     
        public tableaux(int taille) {
            int max = 99;
            taille = 10;
            tab = new int[taille];
            for (int i = 0; i < taille; i++) {
                tab[i] = (int) (Math.random() * (max)) + 1;
                tab[i]++;
            }
        }
     
        public void afficheTableau() {
            for (int i = 0; i < 10; i++) {
                tab[i]++;
                Terminal.ecrireIntln(tab[i]);
            }
     
        }
     
        public  int[] triMinimum() {
            int debut = tab[0];
            int posMin = debut;
            for (int i = debut + 1; i < tab.length - 2; i++) {
                posMin = i;
                for (int j = i + 1; j <= tab.length - 1; j++) {
                    if (tab[j] < tab[posMin]) {
                        posMin = j;
                    }
                }
                int tampon = tab[i];
                tab[i] = tab[posMin];
                tab[posMin] = tampon;
     
     
            }
            Terminal.ecrireStringln("Tableau trié : "+tab);
     
                    return tab;
     
        }
     
        public static void main(String[] args) {
            tableaux tab1 = new tableaux(12);
            tab1.afficheTableau();
            tab1.triMinimum();
     
        }
     
    }

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par chikita Voir le message
    Quand je compile j'obtiens "Tableau trié : 2@5hk9z6m3.
    Vraiment ? Ah, mince.
    Eh bien, il semblerait que si tu essaies de faire la String "machin: " + tab, ça affiche n'importe quoi... Je suis sûr qu'on verra pourquoi plus tard.
    Du coup, ça veut dire que tu vas devoir afficher ton tableau toi-même, au lieu de compter sur Java pour le faire.

    (On verra plus tard comment faire pour que Java l'affiche lui-même.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Et bien il va falloir que tu parcoure ton tableau et d'afficher a chaque fois la valeur à l'indice de ta boucle, (mais ce que tu es entrain de faire avec ce system.out c'est d'afficher l'adresse du tableau enfin je ne suis pas sûr de ça)

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    ton algo fait le contraire de ce que tu souhaites : cet algo fait un tri par ordre décroissant.
    remplace ça:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //triMinimum()
                    if (tab[j] < tab[posMin]) {
                        posMin = j;
                    }
    par :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //triMinimum()
                    if (tab[j] > tab[posMin]) {
                        posMin = j;
                    }

    pour afficher ton tableau rien de plus simple qu'une boucle:
    Code java : 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
     
     public  int[] triMinimum() {
            int debut = tab[0];
            int posMin = debut;
            for (int i = debut + 1; i < tab.length - 2; i++) {
                posMin = i;
                for (int j = i + 1; j <= tab.length - 1; j++) {
                    if (tab[j] > tab[posMin]) {
                        posMin = j;
                    }
                }
                int tampon = tab[i];
                tab[i] = tab[posMin];
                tab[posMin] = tampon;
     
     
            }
    	       	System.out.println("tab trié");
     
    	 for(int element : tab )
    		 Terminal.ecrireStringln("Tableau trié : "+element +"\t");
                    return tab;
     
        }

  5. #5
    Membre à l'essai
    Femme Profil pro
    bordeaux
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : bordeaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    merci pour ta réponse, je vais chercher car j'aimerais pourvoir faire appel a méthode, je pense qu'il va me falloir une autre boucle pour afficher le résultat.

    pour le moment j'ai encore du mal, je n'ai pas évident quand on débute mais l'important est que cela me plaise.

    Dans tout les cas c'est sympa d'avoir un peu d'aide car parfois on ne voit pas ou se trouve nos erreurs

  6. #6
    Membre à l'essai
    Femme Profil pro
    bordeaux
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : bordeaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    ca y est quand je compile cela fonctionne bien a part que mon tableau n'est pas trié.

    la console choisit des entiers au hasard et après elle me marque :

    tab trié

    Tableau trié : 46
    Tableau trié : 22
    Tableau trié : 66
    Tableau trié : 87
    Tableau trié : 16

    etc..

    Alors que je devrais avoir
    Tableau trié : 87
    Tableau trié : 66
    Tableau trié : 46
    Tableau trié : 22
    Tableau trié : 16

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Dis-moi, ta variable int debut...
    Tu lui donnes quelle valeur, et quel effet ça va donner ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    le principe d'un tri par minimum successif consiste à identifier, par itération, l'élément le plus petit, on le positionne en tête de tableau(côté gauche) et on répète l'opération pour les éléments suivants(éléments après rangement):

    Code java : 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
     
     public  int[] triMinimum() {
            int posMin ;
            for (int i = 0; i < tab.length - 1; i++) {
                posMin = i;
                for (int j = i + 1; j < tab.length ; j++) {
                    if ( tab[posMin]>tab[j] ) {
                        posMin = j;
                    }
                }
    	 int tampon =tab[posMin];
    	tab[posMin]=tab[i];
    	tab[i]=tampon;
     
     
            }
           // Terminal.ecrireStringln("Tableau trié : ");
    	 System.out.println("tab trié");
    	System.out.print("[");
    	 for(int element : tab ){
    	  System.out.print(element +"\t");
           //Terminal.ecrireStringln( element+"\t");
     
    	}
    	System.out.print("]\n");
              return tab;
     
        }

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    armel18, pour un débutant, ça n'a aucun intérêt de copier/coller le code fini d'un connaisseur. Pour trier un tableau, il suffit d'utiliser Arrays.sort(), ce n'est pas le tri par sélection mais à ce compte-là on s'en fiche -_-°...

    Si tu veux que tes conseils servent à quelque chose, parle plutôt de ce qui ne va pas dans le code que le débutant a construit lui-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Femme Profil pro
    bordeaux
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : bordeaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    il y a quelque chose que je ne comprend pas dans ma méthode. J'ai une boucle qui parcoure tout le tableau, une autre boucle qui parcoure le tableau à l'indice 1. Une condition if qui échange l'indice 0 et 1 si l'entier de l'indice 1 est plus grand que celui de l'indice 0. Encore une boucle qui est censé parcourir le tableau trié et me l'afficher à l'écran. Or la console m'indique que je pointe sur aucun tableau. Je sais bien que les tableaux sont ma hantise mais j'aimerais dépassé ce petit blocage. Est-ce que quelqu'un pourrait m'aider a comprendre pourquoi je pointe sur rien malgré ma boucle.



    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
     
    public  <tableau> void triMinimum() {
    		int tampon = 0;
    		for (int i = 0; i <= tab.length; i++) {
     
    			for (int j = i + 1; j < tab.length; j++) {
    				if (tab[i] > tab[j]) {
    					tampon = tab[i];
    					tab[i] = tab[j];
    					tab[i] = tampon;
    				}
    			}
     
    		}
     
    		Terminal.ecrireStringln("tab trié");
    		for (int i =0;i<=tab.length;i++){
    			Terminal.ecrireStringln("Voici le tableau trié :" + tab[i] + "\t");
    		}
     
     
    	}

  11. #11
    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
    Salut,

    Il n'y a pas d'échange fait ici, parce que dans la dernière ligne ça devrait être tab[j] et pas tab[i] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tampon = tab[i]; // tab[i] dans tampon
    tab[i] = tab[j]; // tab[j] dans tab[i]
    tab[i] = tampon; // tampon (donc tab[i]) dans tab[i] !
    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.

  12. #12
    Membre à l'essai
    Femme Profil pro
    bordeaux
    Inscrit en
    Novembre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : bordeaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    SUPER j'ai trouvé en refaisant ma méthode et en suivant pas à pas sur une feuille toute les étapes de mon programme. Je suis trop contente et je remercie tout ceux qui ont eux la gentillesse de m'aider. Juste pour le plaisir voici mon programme fini :

    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
     
     
    public class tableaux {
     
    	protected static int[] tab;
     
    	public tableaux(int taille) {
    		int max = 99;
    		taille = 10;
    		tab = new int[taille];
    		for (int i = 0; i < taille; i++) {
    			tab[i] = (int) (Math.random() * (max)) + 1;
    			tab[i]++;
    		}
    	}
     
    	public void afficheTableau() {
    		for (int i = 0; i < 10; i++) {
     
    			Terminal.ecrireStringln(tab[i] + " ");
    		}
     
    	}
     
    	public <tableau> void triMinimum() {
     
    		for (int i = 0; i < tab.length; i++) {
    			int posmini = i;
    			for (int j = i + 1; j < tab.length; j++) {
     
    				if (tab[j] < tab[posmini]) {
    					posmini = j;
    				}
    			}
    			if (posmini != i) {
    				int mini = tab[posmini];
    				tab[posmini] = tab[i];
    				tab[i] = mini;
     
    			}
    		}
     
    		for (int i = 0; i < tab.length; i++) {
    			Terminal.ecrireStringln("Voici le tableau trié :" + tab[i] + "\t");
    		}
     
    	}
     
    	public static void main(String[] args) {
    		tableaux tab1 = new tableaux(12);
    		tab1.afficheTableau();
    		tab1.triMinimum();
     
    	}
     
    }

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

Discussions similaires

  1. OCAML Tri par selection du minimum
    Par Gregoiredu89 dans le forum Caml
    Réponses: 1
    Dernier message: 25/03/2014, 06h24
  2. Tri par minimum
    Par Franck.H dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h48
  3. Tri par sélection du minimum récursif
    Par thechieuse dans le forum Pascal
    Réponses: 2
    Dernier message: 05/11/2008, 16h03
  4. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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