Ich habe habe folgendes Problem,
ich möchte das Hare-Niemeyer Wahlverfahren in Java mit hilfe von Arrays umsetzen.
Dabei Frage ich den Benutzer nach N Parteien und M zu vergebenen Mandate.
Danach wird mit einer For Schleife die Namen und die Stimmenanzahl der Parteien gefragt.
Wahlverfahren:
Es werden nur ganze Mandate Verteilt.
Eventuelle verbleibende restliche Mandate werden so verteilt, dass die Partei, deren Nachkommastelle den höchsten Wert enthält, zuerst ein weiteres Mandat bekommt, dann die Partei mit dem zweithöchsten Wert, usw. bis alle restlichen Mandate verteilt sind.
Nachkommastellen, soll ein Zufallsgenerator entscheiden
Beispiel.
32 Mandate
Partei A hat 10,80 Stimmen
Partei B hat 10,60 Stimmen
Partei C hat 10,60 Stimmen
Jede Partei bekommt erstmal 10 Mandate und durch die Nachkommestellen bleiben 2 weitere Mandate über. Diese werden einmal an Partei A abgebeben und zwischen B und C soll das los entscheiden.
Die Nachkommestellen kann ich porblemlos mit mod1 berechnen.
Mein Problem besteht dadrin in der Verteilung der Restmandate.
Ich hatte mir überlegt mit Hilfe einer For Schleife die so oft durchläuft wie es Restmandate gibt, immer den höchsten Wert des Arrays zu bestimmen und der Patei +1 Stimme zu geben.
In der For Schleife sollte dann noch eine IF Bedingung überprüfen ob der Index Wert im Array der gleich Anzahl der Restmandate ist eine Gleichheit aufweißt. Um damit das Losverfahren einzuleiten.
Am Ende der Vorschleife soll der Index des höhsten Wertes auf 0 gesetzt werden damit er beim nächsten durchlauf rausfällt.
Leider scheitere ich momentan am bestimmen des Index Wertes. Im Forum habe ich schon eine erweiterte For Schleife gefunden die mit den Max Wert ermittelt. Weiß nun aber nicht wie ich den Index dises Wertes bestimme.
Die If Abfrage würde ich mit equals lösen.
Oder gehe ich an die Aufgabe total falsch ran ?
Quellcode
ich möchte das Hare-Niemeyer Wahlverfahren in Java mit hilfe von Arrays umsetzen.
Dabei Frage ich den Benutzer nach N Parteien und M zu vergebenen Mandate.
Danach wird mit einer For Schleife die Namen und die Stimmenanzahl der Parteien gefragt.
Wahlverfahren:
Es werden nur ganze Mandate Verteilt.
Eventuelle verbleibende restliche Mandate werden so verteilt, dass die Partei, deren Nachkommastelle den höchsten Wert enthält, zuerst ein weiteres Mandat bekommt, dann die Partei mit dem zweithöchsten Wert, usw. bis alle restlichen Mandate verteilt sind.
Nachkommastellen, soll ein Zufallsgenerator entscheiden
Beispiel.
32 Mandate
Partei A hat 10,80 Stimmen
Partei B hat 10,60 Stimmen
Partei C hat 10,60 Stimmen
Jede Partei bekommt erstmal 10 Mandate und durch die Nachkommestellen bleiben 2 weitere Mandate über. Diese werden einmal an Partei A abgebeben und zwischen B und C soll das los entscheiden.
Die Nachkommestellen kann ich porblemlos mit mod1 berechnen.
Mein Problem besteht dadrin in der Verteilung der Restmandate.
Ich hatte mir überlegt mit Hilfe einer For Schleife die so oft durchläuft wie es Restmandate gibt, immer den höchsten Wert des Arrays zu bestimmen und der Patei +1 Stimme zu geben.
In der For Schleife sollte dann noch eine IF Bedingung überprüfen ob der Index Wert im Array der gleich Anzahl der Restmandate ist eine Gleichheit aufweißt. Um damit das Losverfahren einzuleiten.
Am Ende der Vorschleife soll der Index des höhsten Wertes auf 0 gesetzt werden damit er beim nächsten durchlauf rausfällt.
Leider scheitere ich momentan am bestimmen des Index Wertes. Im Forum habe ich schon eine erweiterte For Schleife gefunden die mit den Max Wert ermittelt. Weiß nun aber nicht wie ich den Index dises Wertes bestimme.
Die If Abfrage würde ich mit equals lösen.
Oder gehe ich an die Aufgabe total falsch ran ?
Quellcode
Java:
Integer[] pateien = new Integer[p]; //Wobei P = Anzahl der Parteien ist
Double[] reststimmen = new Double[p]; //Wobei P = Anzahl der Parteien ist
Double[] mandate = new Double[p+1];
// der 0 Indexwert ist für die Gesammtmandate und die folgenden für die Einzelmandate der Parteien
for (int j = 0; j < pateien.length; j++)
{
mandate[pzaehler] = (mandate[0] * stimmen[j]) / gesamtstimmen;
reststimmen[j] = mandate[pzaehler] %1;
System.out.printf("Anzahl der zu vergebenen Mandate %2.0f \n \n", mandate[0]);
System.out.println("Patei \t Stimmen \t exakte Mandate \t reusltiernde Mandate");
System.out.printf(pateiname[j] + "\t \t" + stimmen[j] + "\t %2.4f \n", + mandate[pzaehler]);
pzaehler +=1;
}
// Max Wert im Array
for (int z = 0; z < reststimmen.length; z++)
{
int max = Integer.MIN_VALUE;
for (int i : reststimmen) max = Math.max(max, i);
{
}
System.out.println(" letzter " + max); // Überprüfung des Wertes
reststimmen[max] =0; // hier liegt das Problem
}
Zuletzt bearbeitet von einem Moderator: