Wahlverfahren

Status
Nicht offen für weitere Antworten.

sierro

Neues Mitglied
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

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:
S

SlaterB

Gast
Java:
int tempMaxIndex = ..;
int tempMax = ..
for (i..) {
  if (aktuelles Element > tempMax ) {
    tempMax + tempMaxIndex  aktualisierten
  }
}
 

sierro

Neues Mitglied
SlaterB könntest du mir das etwas genauer erklären ?

Die For Schleife findet den Maximal Wert ?

Und was genau macht deine IF Bedingung?
Schlatet sie sich ein wenn der Maximal wert ermittelt worden ist ?
 
S

SlaterB

Gast
die for-Schleife durchläuft das Array,
die if-Bedingung schaut sich das aktuelle Array-Element an, vergleicht es mit dem gemerkten bisherigen TempMax

genauer gehts nun wirklich nicht, bisschen programmieren muss doch sein
 
Status
Nicht offen für weitere Antworten.

Oben