Mettre un tableaux String selon un tableaux Int. [Résolu]

Signaler
Messages postés
3
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009
-
Messages postés
3
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009
-
Bonjour. Voici la situation:

il y a une liste d'etudiant avec leur note. Et la note et le nom des etudiants sont distribues dans 2 tableaux dont un est int pour la note et string pour nom. Le probleme  c'est que je dois mettre les notes en ordres croissant avec un Tri. Par contre j'arrive seulement a mettre le tableau de int en ordre croissant et non le String. C'est-a-dire le nom de la personne qui a la note ne se deplace pas lorsqu'on deplace sa note. Quelqu'un pourrait m'indiquer comment on fait ?

Voici le code pour trier les notes:

public static int tri (int notes[], String etudiant[]) {
        //Tri des numéros des étudiants
        int indMin = 0;
        int nbEtudiants = 6;
       
        //Boucle
        for (int i = 0; i <= nbEtudiants; i++){
            indMin = i;
            for ( int j = indMin + 1; j <= nbEtudiants; j = j+1){
                if (notes[j] < notes[indMin]){
                    indMin = j;
                }
            }
           
            if (indMin != i){
                echanger(notes, i, indMin);
            }
               
        }
        return indMin;
    }
       
    public static void echanger (int[] notes, int i, int indMin) {
        //Changer l'ordre de croissance ou de décroissance.
        int numeroTemp;
       
        numeroTemp = notes[i];
        notes[i] = notes[indMin];
        notes[indMin] = numeroTemp;
    }

2 réponses

Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut
Lorsque tu fait des déplacements dans ton tableau de int, tu dois aussi déplacer les noms correspondants du tableau de String. Par exemple:

// Noms des personnes:

String [] n= new String {"a", "b", "d", "c"};

// notes:

int [] v = new int [0, 10, 50, 30];

Ici, nous devons permuter 50 et 30:


int old = v[2];

v[2] = v[3];

v[3] = old;

// cependant, nous voulons que le nom reste associé à sa note, alors:

String vieux = (String) (n[2].clone());

n[2] = (String) (n[3].clone());

n[3] = vieux;
Si jamais tu te demander comment ca se fait qu'on doit effectuer le code comme écrit ci-dessus pour les String, c'est qu'en Java, lorsqu'on écrit String nom "abc", s2 nom;, une référence en mémoire de l'objet nom est affectée à s2. Ainsi, avec le code que j'ai écrit, ca serait comme si on avait écrit:

String vieux n[2] n[3] = n[3] = vieux. Ca produit une référence circulaire. La fonction [http:http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#clone() clone()]retourne une copie de l'objet source sour la forme d'un objet Object. Ainsi, nous somme certains qu'il n'y aura pas de référence circulaire.
Quant au (String) placé devant l'appel à clone() , c'est un 'opérateur' de transtypage. Celui-ci convertit son opérande de droite en objet (ou type) mentionné entre parenthèse. Nous devons faire un transtypage, car autrement, lorsque tu désireras obtenir les noms associés aux notes, tu auras pour résultat un appel implicite à toString() et ce ne sera pas ce que tu souhaites!.

Note que les méthodes clone() et toString() sont définiées dans la class Object. Donc, comme tout objet que tu crées, il hérites de façon directe ou indirecte de la classe object, alors ta classes possède aussi une 'copie' de ces méthodes, comme toute classe!

J'espère que ca t'aides un peu

chris081

<hr width ="100%" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici
Messages postés
3
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009

Merci bien. j'ai réussi =D