recherche d'une valeur maximale
Bonjour,
La situation est la suivante
Dans un tableau tabJoueur, il y a des éléments de type joueur.
Un joueur est caractérisé par sa variable « nom » et sa variable « totalPoints ».
Il existe donc une classe joueur qui contient ces deux variables.
Un croupier est un joueur qui ne fait pas partie du tableau tabJoueur .
Il faut pouvoir dire quel est le joueur qui a obtenu le maximum de points.
La démarche est la suivante :
-on détermine d’abord le nombre de points maximum dans le tableau tabJoueur( quelle est la valeur de totalpoints la plus importante) , puis on le compare à la variable totalPoints du croupier.
La règle suivante est établie :
-si après avoir parcouru tout le tableau tabJoueur, il s’avère
A-qu’il existe des execaux(2 ou plus) dans le tableau mais il existe un élément dans le tableau qui possède un nombre de points supérieur à celui de ces joueurs execaux.
-le nombre de joueurs execaux nous importe donc peu et on le reinitalise à 1, qui est sa valeur première
-on retient l’index de l’élement( joueur) qui possède le nombre maximal de points dans le tableau(instruction if(this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus){
index_maximum_total_points_1=i; }
et on compare son nombre de points à celui du croupier
-si c’est le croupier qui possède un nombre plus important de points, il est le gagnant.
-si le joueur du tableau tabJoueur qui possède le nombre maximal de points ,a un nombre de points > totalPoints du croupier, c’est lui qui est gagnant.
-si les deux joueurs sont à égalité ils sont tous les 2 gagnants.
B-qu’il existe +2 execaux dans le tableau qui ont obtenu le nombre maximal de points,
on compare le nombre de points maximum obtenus par ces joueurs execaux avec celui du croupier
-si c’est le croupier qui a obtenu un nombre +important de points, il est le gagnant
-sinon, si ce sont les execaux qui ont obtenu un nombre de points +important , du fait qu’il y a + de deux execaux, on considère qu’il n’y a pas de gagnant de la partie
-si les execuaux dans le tableau qui ont obtenu le nombre maximal de points et le croupier sont à égalité, on estime qu’il n’y a pas de gagnant.
B-il existe deux execaux dans le tableau qui ont obtenu le nombre maximal de points
A chaque passage dans la boucle for, la variable nombre_joueurs_execaux est incrémentée au niveau de cette condition :
If (this.tabJoueur[i].totalPoint== max_tabJoueur_points_obtenus)
{ nbre_joueurs_execaux++;et l’index de l’élément du tableau qui a obtenu un nombre de points équivalent à celui du maximum est retenu grâce à cette instruction
if (nbre_joueurs_execaux==2)
index_maximum_total_points_2=i;
-1er cas :le nombre de points maximum est celui du premier élement du tableau, donc de celui d’index 0.
On a recupéré l’index du deuxième élément qui possède le même nombre de points maximum grâce à la variable index_maximum_total_points_2=i;
on compare alors la valeur de max_tabJoueur_points_obtenus avec celle de la variable totalPoint du croupier
· si (max_tabJoueur_points_obtenus > this.croupier.totalPoint) alors les deux ganants sont les deux execaux du tableau tabJoueur
· si (max_tabJoueur_points_obtenus < this.croupier.totalPoint) alors c’est le croupeir qui est gagnant
· max_tabJoueur_points_obtenus == this.croupier.totalPoint, les trois joeurs sont à égalité et on récupère leur nom par l’instruction
System.out.println("les trois joueurs"+ this.tabJoueur[0].nom +" "+this.tabJoueur[index_maximum_total_points_2].nom+" "+this.croupier.nom+ "sont à égalité");
-2ème cas :le nombre de points maximum n’est pas celui du premier élement du tableau,
on récupère donc les index des deux éléments execaux dans le tableau grâce aux variables
index_maximum_total_points_1 et index_maximum_total_points_2.
on compare alors la valeur de max_tabJoueur_points_obtenus avec celle de la variable totalPoint du croupier
· si (max_tabJoueur_points_obtenus > this.croupier.totalPoint) alors les deux ganants sont les deux execaux du tableau tabJoueur
· si (max_tabJoueur_points_obtenus < this.croupier.totalPoint) alors c’est le croupeir qui est gagnant
· max_tabJoueur_points_obtenus == this.croupier.totalPoint, les trois joueurs sont à égalité et on récupère leur nom par l’instruction
System.out.println("les trois joueurs"+ this.tabJoueur[index_maximum_total_points_1].nom +" "+this.tabJoueur[index_maximum_total_points_2].nom+" "+this.croupier.nom+ "sont à égalité");
pouvez vous me dire si le code de la procedure afficher gagnant vous semble corect ou incomplet etégalement s'il est possible de faire plus court par exemple en remplaçant certaines instructions if imbriquées.
Merci vraiement beaucoup de votre aide.
Cordialement.
Natahlie
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
public void affichergagnant(){
int i ;
int max_tabJoueur_points_obtenus= this.tabJoueur[0].totalPoint;
int index_maximum_total_points_1=0;
int index_maximum_total_points_2=0;
int index_maximum_total_points_3=0;
Citation:
]on est obligé d'initialiser à 1 la valeur de cetre variable pour qu'elle puisse passer à 2 dès qu'il y aura deux joueurs qui obtiendront le même nombre de points
int nbre_joueurs_execaux=1;
boucle for qui parcourt le tableau tabJoueur de la partie en cours pour déterminer le joueur qui a obtenu le plus de points
for(i=1;i<this.tabJoueur.length;i++ ){
if(this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus)
{
max_tabJoueur_points_obtenus=this.tabJoueur[i].totalPoint;
on retient l'index de l'élément pour lequel on a obtenu le nombre maximum de points
index_maximum_total_points_1=i;
Si, auparavant il y eu des execaux , le fait qu'il existe un nombre de points supérieur à celui des joueurs execaux annule le fait qu'il y ait des execaux et la variable nbre_joueurs_execaux est réinitialisée à sa valeur première
nbre_joueurs_execaux=1;
}// fin de if this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus
si on est dans le cas où le joueur courant a un nombre de points==max_tabJoueur_points_obtenus
else if (this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus)
{
nbre_joueurs_execaux++;
on ne veut pas retenir les données de plus de deux joueurs execaux
Dès que le nombre de joueurs execaux est =2 on retient l'index de l'element du tableau pour lequel le nombre de points est == max_tabJoueur_points_obtenus.
Si, arrivés à la fin du tableau il s'avère qu'il y a en tout et pour tout
2 execaux, on pourra alors retrouver l'élément du tableau pour lequel
cette égalité est vérifiée
if (nbre_joueurs_execaux==2)
index_maximum_total_points_2=i;
}// fin de else if (this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus)
}//fin de boucle for
si le nombre de joueurs execaux est > 2( nbre_joueurs_execaux>2)et max_tabJoueur_points_obtenus est > au nombre total de points du croupier(this.croupier.totalPoint), alors la partie n'a pas de gagnant
if (nbre_joueurs_execaux>2 && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
{
System.out.println("il ya trop de joueurs execaux, cette partie n' a pas de gagnant");
}// fin de if (nbre_joueurs_execaux>2 && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
si le nombre d'execaux est > 2 et que le contenu de la variable max_tabJoueur_points_obtenus est < nombre total de points du croupier
if (nbre_joueurs_execaux>2 && max_tabJoueur_points_obtenus<this.croupier.totalPoint)
{
System.out.println("le gagnant est le croupier");
}
if (nbre_joueurs_execaux==2 )
S'il y a deux execaux, il y a deux cas possibles
{// debut des instructions liées au if (nbre_joueurs_execaux==2 )
premier cas : il s'agit du premier joueur du tableau et d'un autre joueur du tableau qui possède le même nombre de points
if (max_tabJoueur_points_obtenus== this.tabJoueur[0].totalPoint)
{// début du code pour la condition if
(max_tabJoueur_points_obtenus== this.tabJoueur[0].totalPoint)
// on écrit les index des deux éléments execaux
System.out.println( "l' index du premier execaux est 0 et l'index du deuxième execaux est "+ index_maximum_total_points_2);
//on compare alors la valeur de max_tabJoueur_points_obtenus avec celle de la variable totalPoint du croupier
if (max_tabJoueur_points_obtenus > this.croupier.totalPoint)
{System.out.println("les deux gagnants sont " +this.tabJoueur[0].nom +" " + this.tabJoueur[index_maximum_total_points_2].nom);
}//fin de if (max_tabJoueur_points_obtenus > this.croupier.totalPoint)
else if (max_tabJoueur_points_obtenus < this.croupier.totalPoint)
{System.out.println (" le gagnant est le croupier");
}//fin de if max_tabJoueur_points_obtenus < this.croupier.totalPoint)
else
{System.out.println("les trois joueurs"+ this.tabJoueur[0].nom +" "+
this.tabJoueur[index_maximum_total_points_2].nom+" "+this.croupier.nom+
"sont à égalité");
}// fin de else
}// fin de if (max_tabJoueur_points_obtenus== this.tabJoueur[0].totalPoint)
// deuxième cas: le nombre maximal de points n'est pas celui du premier joueur du tableau tabJoueur
if (max_tabJoueur_points_obtenus!= this.tabJoueur[0].totalPoint)
{// on écrit les index des deux éléments execaux
System.out.println( "l' index du premier execaux est "+this.tabJoueur[index_maximum_total_points_1].nom +" et l'index du deuxième execaux est "+ index_maximum_total_points_2);
//on compare alors la valeur de max_tabJoueur_points_obtenus avec celle de la variable totalPoint du croupier
if (max_tabJoueur_points_obtenus > this.croupier.totalPoint)
{
System.out.println("les deux gagnants sont " +this.tabJoueur[index_maximum_total_points_1].nom +" " + this.tabJoueur[index_maximum_total_points_2].nom);
}//fin de if (max_tabJoueur_points_obtenus > this.croupier.totalPoint)
else if (max_tabJoueur_points_obtenus < this.croupier.totalPoint)
{System.out.println (" le gagnant est le croupier");
}//fin de if max_tabJoueur_points_obtenus < this.croupier.totalPoint)
else
{System.out.println("les trois joueurs"+ this.tabJoueur[index_maximum_total_points_1].nom +" "+this.tabJoueur[index_maximum_total_points_2].nom+" "+this.croupier.nom+ "sont à égalité");
}
}// fin de if (max_tabJoueur_points_obtenus!= this.tabJoueur[0].totalPoint)
}// fin de if (nbre_joueurs_execaux==2 )
}// fin de afficher gagnant |