Tri décroissant sur 3 tableaux Java (string, double et int)

Pikkoro359 2 Messages postés dimanche 5 juin 2016Date d'inscription 8 juin 2016 Dernière intervention - 5 juin 2016 à 03:50 - Dernière réponse : Pikkoro359 2 Messages postés dimanche 5 juin 2016Date d'inscription 8 juin 2016 Dernière intervention
- 8 juin 2016 à 12:44
Bonjour à tous,

Je suis débutant en Java.

Ma question est un peu complexe.

Je souhaite réaliser un programme qui affiche à l'écran le "Nom" de l'élève suivie de sa "Moyenne" suivie du "Nombre totales de notes".

J'ai donc créé un tableau de string pour stocker les noms.
J'ai créé un tableau int pour stocker les notes des élèves (notes demandées à l'utilisateur et donc saisies au clavier) et un autre pour stocker le nombre total de notes de chaque élèves car chacun n'a pas forcément le même nombre de notes.
J'ai ensuite créé un tableau de double pour faire la moyenne de chaque notes de chaque élève.

Jusque là tout va bien, j'ai créé une fonction somme pour la tableau Total des notes et une autre fonction Moyenne pour calculer leur moyenne.

Le problème est que je dois maintenant afficher à l'écran 3 tableaux qui ne sont liés aucunement.
Je dis ça car je dois afficher à l'écran la moyenne de chacun des élèves par ordre décroissant avec leur nom et le total du nombre de notes sur la même ligne lors de l'exécution.
J'arrive très bien à faire le tri du tableau Moyenne mais lorsque je veux afficher:
Nom + Moyenne + TotalNotes seul le tableau Moyenne se tri de façon décroissante donc la moyenne change de place.
Les noms restent triés dans l'ordre que je l'ai écrit dans le tableau et pareil pour le nombre total de notes.
J'aimerais que lorsque que le dernier élèves de mon tableau obtient la plus grande moyenne qu'il se retrouve en 1ère position, mais seule la moyenne se retrouve en 1ère position ainsi c'est comme si le premier élève dans l'ordre de mon tableau Nom était toujours le meilleur or ce n'est pas forcément le cas.

J'ai pensé du coup créer un nouveau tableau de String en intégrant ces 3 tableaux mais lorsque je rentre des notes plus aucun calcul ne se fait car c'est intégré à un seul tableau.

Voici mes tableaux :

String[] Nom = {"Pierre Henri", "Steve Martin"}; // Il y a plus d'élève mais je simplifie

int [] Notes1 = new int[1]; //Quand une note est ajoutée le tableau s'agrandit
int [] Notes2 = new int[1];

int [] TotalNotes = new int[Nom.length];
double [] Moyenne = new double[Nom.length];

Pour l'affichage j'ai fait :

1) Affichage des 3 tableaux différencié qui ne tri que la moyenne, seul la moyenne change de place.

System.out.print(Nom[0] + " " + Moy[0] + " (" + TotalNotes[0] + " notes)");

System.out.print(Nom[1] + " " + Moy[1] + " (" + TotalNotes[1] + " notes)");


2) Création d'un seul tableau de string puis affichage de celui-ci par une fonction qui affiche un tableau mais ici les calculs Moyenne et TotalNotes ne se font pas lors de l'affichage et je ne comprends pas pourquoi.

String[] Nomtri = {"Pierre Henri " + Moyenne[0] + " (" + TotalNotes[0] + " notes)", "Steve Martin " + Moy[1] + " (" + TotalNotes[1] + " notes)"};


Si quelqu'un pouvait m'éclairer ça serait vraiment super.
Merci beaucoup
Afficher la suite 

Votre réponse

2 réponses

KX 15681 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 19 août 2018 Dernière intervention - 5 juin 2016 à 11:08
0
Merci
Bonjour,

Tu aurais un exemple concret de résultat que tu obtient, pour nous expliquer en quoi c'est faux, comparé au résultat que tu veux.

Remarque : plutôt que de faire 3 tableaux (ou plus ?) tu pourrais faire une classe qui agrège les 3 données et faire un tableau de ses objets.

Exemple :

public class Carnet {
    private final String nom;
    private final double totalNotes;
    private final double moyenne;
    ...
}

Carnet[] carnets = ...

Arrays.sort(carnets, new Comparator<Carnet>() {
     public int compare(Carnet c1, Carnet c2) {
         return ...
     }
}

for (Carnet carnet : carnets) {
    System.out.println(carnet);
}
Commenter la réponse de KX
Pikkoro359 2 Messages postés dimanche 5 juin 2016Date d'inscription 8 juin 2016 Dernière intervention - Modifié par Pikkoro359 le 8/06/2016 à 12:52
0
Merci
Salut KX,

Merci pour ta réponse.
Etant débutant je dois utiliser uniquement que ce que nous avons vu en cours, et ce dont tu me parles je n'ai pas encore vu cela.
Pareil pour tout ce qui est ArrayList nous n'avons pas le droit de l'utiliser pour des calculs ou autres.

Pour te faire un point de ce que j'attends à l'exécution et ce que j'obtiens je vais te donner un exemple avec 3 élèves.
Laura Dupont, Pierre Henri et Steve Martin.

- Voici ce que j'obtiens s'ils n'ont pas de notes (tout est initialisé à 0 et le classement se fait par ordre alphabétique) :

Laura Dupont : 0.0 (0 notes)
Pierre Henri : 0.0 (0 notes)
Steve Martin : 0.0 (0 notes)


- Le programme me demande de rentrer les notes des élèves :
Pour Laura Dupont je lui donne 9, 11 et 18 (Moyenne : 12.67)
Pierre Henri je lui donne 12, 19 et 20 (Moyenne : 17)
Steve Martin je lui donne 15 et 16 (Moyenne : 15.5)
Certains élèves peuvent avoir des notes en moins, bon c'était juste pour l'exemple.

Voici ce que j'obtiens après l'exécution (le tri se fait par ordre décroissant de la moyenne, mais ici seul la moyenne change de place, ce qui fausse mon affichage) :

Laura Dupont : 17 (3 notes) // Laura Dupont devrait avoir 12.67
Pierre Henri : 15.5 (3 notes) // Pierre Henri devrait avoir 17
Steve Martin : 12.67 (2 notes) // Steve Martin devrait avoir 15.5


Voici ce que j'attends et que je n'arrive pas à faire (Les moyennes et les noms et le nombre de notes devraient changer de place en fonction de la place que prend la moyenne de l'élève) :

Pierre Henri : 17 (3 notes)
Steve Martin : 15.5 (2 notes)
Laura Dupont : 12.67 (3 notes)



Rappel pour l'affichage j'ai fait (exemple de 2 élèves) :
1ère solution) Affichage des 3 tableaux différenciés :
System.out.print(Nom[0] + " " + Moy[0] + " (" + TotalNotes[0] + " notes)");
System.out.print(Nom[1] + " " + Moy[1] + " (" + TotalNotes[1] + " notes)");
2ème solution) Création d'un nouveau tableau de string qui intègre les Noms et les tableaux Moyenne et TotalNotes puis j'affiche ce nouveau tableau par une fonction qui affiche un tableau mais ici les calculs Moyenne et TotalNotes ne se font pas lors de l'affichage et tout reste à 0 et je ne comprends pas pourquoi :
String[] Nomtri = {"Pierre Henri " + Moyenne[0] + " (" + TotalNotes[0] + " notes)", "Steve Martin " + Moy[1] + " (" + TotalNotes[1] + " notes)"};


Aurais tu une idée afin que ces 3 tableaux changent de place en même temps?
Car la solution 2 ne marche pas non plus.
J'ai pensé à une permutation des cases mais en fait je ne crois pas que ça marcherait.
Sinon j'ai pensé que dans ma fonction qui tri un tableau de int de manière décroissante lui mettre un argument supplémentaire pour le tableau Nom des élèves mais je crois que ça ne marchera pas non plus.

Si tu as une autre idée je suis preneur.

Merci beaucoup
Commenter la réponse de Pikkoro359

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.