jumpy18
Messages postés9Date d'inscriptionjeudi 15 avril 2010StatutMembreDernière intervention26 août 2019
-
Modifié le 26 août 2019 à 14:49
tarek_dotzero
Messages postés817Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention12 avril 2022
-
9 oct. 2019 à 17:17
bonjour,
je suis en plein apprentissage du langage java et je souhaite avoir de l'aide sur cet algoritme que j'ai essayé de traduire en java car je n'ai pas le resultat attendue si quelqu'un peut m'aider à y voir un peu plus claire cela m'aiderai à avancer dans mon apprentissage de java
/**
*/
package jumpy.elections;
/** * @author Poudjoum Rodrigue * */
import java.util.Scanner;
public class Elections {
/** * @param args */
public static void main(String[] args) { // TODO Auto-generated method stub
int nbSiegeAPouvoir = 0;
int nbListe = 0;
boolean saisieOk;
String[] nomListe;
int[] voixListe;
boolean[] elemineListe;
int[] siegeListe;
int i;
double[] moyenneListe;
int nbVoixUtile;
double quotientElectoral;
int nbSiegePourvus;
double moyenneMax;
int max = 0;
int iSiege; // no,bre de siège à pourvoir
saisieOk = false;
while (!saisieOk) {
System.out.println("Nombre de siège à Pourvoir");
Scanner sc = new Scanner(System.in);
nbSiegeAPouvoir = sc.nextInt();
if (!(nbSiegeAPouvoir > 0)) {
System.out.println("Erreur : tapez un nombre entier ");
} else {
saisieOk = true;
}
}
// nombre de liste en competition
saisieOk = false;
while (!saisieOk) {
System.out.println("Nombre de Liste en compétition");
Scanner sc = new Scanner(System.in);
nbListe = sc.nextInt();
if (!(nbListe > 0)) {
System.out.println("Erreur : tapez un nombre entier ");
} else {
saisieOk = true;
}
}
// initialisation des tableau
nomListe = new String[nbListe];
voixListe = new int[nbListe];
elemineListe = new boolean[nbListe];
siegeListe = new int[nbListe];
moyenneListe = new double[nbListe];
// saisie des noms et voix des listes
int totalVoix = 0;
for (i = 0; i < nbListe - 1; i++) {
saisieOk = false;
while (!saisieOk) {
System.out.printf("nom de la liste n°", i, ":");
Scanner sc = new Scanner(System.in);
nomListe[i] = sc.next();
if (nomListe[i] == null) {
System.out.println("Erreur: tapé un nom non vide");
} else {
saisieOk = true;
}
}
// saisie du nombre de voix de la liste i
saisieOk = false;
while (!saisieOk) {
System.out.printf("Nombre de voix de la liste ", nomListe[i], ":");
Scanner sc = new Scanner(System.in);
voixListe[i] = sc.nextInt();
if (!(voixListe[i] > 0)) {
System.out.println("Erreur: Entre un nombre entier supérieur à 0");
} else {
saisieOk = true;
}
}
// on incremente le total de voix de la liste
totalVoix = totalVoix + voixListe[i];
}
// cas pas de voix du tout
if (totalVoix == 0) {
System.out.println("Erreur: aucune liste n'a de voix ");
System.exit(0);
}
// calcul des voix
nbVoixUtile = 0;
for (i = 0; i < nbListe - 1; i++) {
float q = (float) (voixListe[i] / totalVoix);
if (q < 0.05) {
elemineListe[i] = true;
} else {
elemineListe[i] = false;
nbVoixUtile = nbVoixUtile + voixListe[i];
}
}
// y-a-t-il des listes non eliminées
if (nbVoixUtile == 0) {
System.out.println("toutes les listes ont été eliminées");
System.exit(0);
}
// repartition des sièges au quotient
quotientElectoral = nbVoixUtile / nbSiegeAPouvoir;
nbSiegePourvus = 0;
for (i = 0; i < nbListe - 1; i++) {
if (!(elemineListe[i])) {
siegeListe[i] = (int) (voixListe[i] / quotientElectoral);
moyenneListe[i] = voixListe[i] / (siegeListe[i] + 1);
nbSiegePourvus = nbSiegePourvus + siegeListe[i];
} else {
siegeListe[i] = 0;
}
}
/*
* repartition des sièges restants à la plus forte moyenne 1 siège est
* attribué à chaque tour de boucle
*/
for (iSiege = 0; iSiege < (nbSiegePourvus - nbSiegePourvus - 1);) {
// recherche de ma plus forte moyenne
moyenneMax = (-1);
for (i = 0; i < nbListe - 1; i++) {
if (!(elemineListe[i])) {
if (moyenneListe[i] > moyenneMax) {
moyenneMax = moyenneListe[i];
max = i;
}
}
}
// on attribue 1 siège à la liste de +forte moyenne
siegeListe[max] = siegeListe[max] + 1;
// on change sa moyenne
moyenneListe[max] = voixListe[max] / (siegeListe[max] + 1);
}
// affichage des resultats sans tri
for (i = 0; i < nbListe - 1; i++) {
if ((elemineListe[i])) {
System.out.printf("la Liste", nomListe[i], "a été éliminée");
} else {
System.out.printf("la Liste", nomListe[i], "a obtenu", siegeListe[i], "sièges");
}
}
}
}
tarek_dotzero
Messages postés817Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention12 avril 2022 9 oct. 2019 à 17:17
Bonjour,
A première vue, vous faites de la division entre deux entiers, cela donne un entier même si vous précisez que l'affectation se fait à un double, vous perdez la précision. Ainsi, faites la conversion de l'un des deux entiers en double. Par exemple pour la ligne 108 :