Algorithme " cote Max "

Résolu/Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 3 févr. 2017 à 22:09
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 4 févr. 2017 à 19:23
Bonjours , voilà j'essaie de crée un algorithme qui me permet d'afficher par exemple les 2 meilleurs valeur obtenue dans un concours ( 18 , 19 , 17 , 20 ) ---->(afficher : 19 , 20) : j'ai réussis a afficher la premier meilleur valeur mais pour la seconde j'en ai vraiment aucune idée , voilà ma méthode pour la première :

 
double cote = scanner.nextInt();
double coteMax = 0;
double temp = 0;
 if( cote > temp){
     temp = cote;
     coteMax = temp;
}


Merci d'avance !

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 3/02/2017 à 22:21
Bonjour,

Tu peux mettre tes valeurs dans un tableau, le trier, puis récupérer les deux dernières valeurs.

int[] tab = {18, 19, 17, 20};
Arrays.sort(tab); // import java.util.Arrays;
int max1 = tab[tab.length-1], max2 = tab[tab.length-2];

La confiance n'exclut pas le contrôle
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
3 févr. 2017 à 23:39
Merci pour votre intervention , Oui je sais mais je préfère avant assimilé en majorité tout ce qui est conditions , boucles , avant de me lancer dans les tableaux , c'est pour cette raison que je voudrais savoir le faire avant avec des conditions (if) , sa devrai être possible je sais pas très bien comment m'y prendre :/
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 févr. 2017 à 10:16
Il faudrait déjà savoir ce que font tes valeurs, parce que
double temp = 0; if (cote > temp)
ne fait que tester si cote est > 0, ce qui n'a pas grand intérêt dans un calcul de maximum, du coup temp ne sert à rien...

Si tu veux stocker les deux meilleures valeurs, il te faudra a minima 2 variables pour stocker chacune des deux valeurs, et ça déjà tu ne les as pas, donc difficile d'aller plus loin. De plus dans ton code il n'y a même pas de boucle, donc on ne sait pas du tout où tu en es dans ta réflexion.

Voici une solution, à adapter à ton besoin :

Scanner sc = new Scanner(System.in);
int max2 = Integer.MIN_VALUE;
int max1 = Integer.MIN_VALUE;
while (true) {
    System.out.print("> ");
    int n = sc.nextInt();
    if (n >= max2) {
        if (n >= max1) {
            max2 = max1;
            max1 = n;
        } else {
            max2 = n;
        }
    }
    System.out.printf("\t%d\t%d\n", max2, max1);
}

Exemple :
	0	0
> 5
0 5
> 3
3 5
> 1
3 5
> 7
5 7
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
4 févr. 2017 à 19:23
d'accord Merci ! , Oui je sais ma méthode peut paraître absurde , mais pourtant elle fonctionne et ne négligeons pas le fait que temp prend toujours une nouvelle valeur une fois que la condition est vérifié, je vous rassures j'ai utilisé une boucle pour parcourir chacune de mes cotes , cependant je n'ai pris que "l'instruction" dans ma boucle. Sinon si y'a une méthode plus raisonnable pour retrouver qu'un seul Max je suis preneur ! :)
0