Menu

Algorithme " cote Max " [Résolu/Fermé]

Jiko-java 187 Messages postés dimanche 25 septembre 2016Date d'inscription 22 juillet 2017 Dernière intervention - 3 févr. 2017 à 22:09 - Dernière réponse : Jiko-java 187 Messages postés dimanche 25 septembre 2016Date d'inscription 22 juillet 2017 Dernière intervention
- 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 !
Afficher la suite 

4 réponses

KX 15361 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - Modifié par KX le 3/02/2017 à 22:21
0
Utile
3
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
Jiko-java 187 Messages postés dimanche 25 septembre 2016Date d'inscription 22 juillet 2017 Dernière intervention - 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 :/
KX 15361 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 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
Jiko-java 187 Messages postés dimanche 25 septembre 2016Date d'inscription 22 juillet 2017 Dernière intervention - 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 ! :)