Signaler

Algorithme " cote Max " [Résolu]

Posez votre question Jiko-java 166Messages postés dimanche 25 septembre 2016Date d'inscription 5 mars 2017 Dernière intervention - Dernière réponse le 4 févr. 2017 à 19:23 par Jiko-java
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 
Utile
+0
plus moins
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];

Jiko-java 166Messages postés dimanche 25 septembre 2016Date d'inscription 5 mars 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 :/
Répondre
KX 14092Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 29 mars 2017 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
Répondre
Jiko-java 166Messages postés dimanche 25 septembre 2016Date d'inscription 5 mars 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 ! :)
Répondre
Donnez votre avis

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.

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

Vous n'êtes pas encore membre ?

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