Election

Messages postés
9
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 août 2019
-
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");
			}
		}
	}

}
Afficher la suite