Algorithme " cote Max "

Résolu
Jiko-java Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   -  
Jiko-java Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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