ZULETZT ANGESEHEN
Die Aufgabe der heutigen Stunde ist die Schulsprecherwahl! Dazu schauen wir uns mal die Aufgabe genauer an und versuchen durch intelligentes Lösen ein vollfunktionsfähiges Programm zu erstellen.
Die Aufgabenstellung lautet:
Das folgende Programm soll nach dem EVA-Prinzip funktionieren. Die Schulsprecherwahl steht an. Dazu soll ein Programm in Java entwickelt werden, das folgende Spezifikationen erfüllen soll: Die Kandidatennamen werden eingebeben und die dazugehörigen Stimmen. Eine Ausgabe-Ranking für alle Kandidaten: Kandidat, Anzahl der Stimmen, Gesamtanzahl der Stimmen, prozentualer Anteil der Stimmen, außer für Platz 1 wird der prozentuale Abstand zum ersten Platz angegeben. Die Kandidaten sollen in der Reihenfolge der Prozente ausgeben werden (Platz 1, Platz 2, usw.) Mit einem Befehl kann eine persönliche Ausgabe durch die Eingabe des Namens für einen einzelnen Kandidaten erfolgen.
Lösungsprozess der Aufgabe:
/**
*
* Das fertige Java Programm der SchulsprecherWahl
*
* @version 1.0 vom 25.02.2024
* @MeinInfoKurs.github.io
*/
public class SchulsprecherWahl {
public static void main(String[] args) {
String Kandidat1="", Kandidat2="", Kandidat3="", Platz1="", Platz2="", Platz3="";
int Stimmen1=0, Stimmen2=0, Stimmen3=0, Summe=0, StimmenPlatz1=0, StimmenPlatz2=0, StimmenPlatz3=0;
double Anteil1, Anteil2, Anteil3;
/* Eingabe von Werten */
Kandidat1 = InOut.readString("Name des ersten Kandidaten: ");
Kandidat2 = InOut.readString("Name des zweiten Kandidaten: ");
Kandidat3 = InOut.readString("Name des dritten Kandidaten: ");
System.out.println("");
Stimmen1 = InOut.readInt("Stimmen von " + Kandidat1 + ":");
Stimmen2 = InOut.readInt("Stimmen von " + Kandidat2 + ":");
Stimmen3 = InOut.readInt("Stimmen von " + Kandidat3 + ":");
/* Bestimmung der Prozente */
Summe = Stimmen1 + Stimmen2 + Stimmen3;
Anteil1 = Stimmen1 / Summe * 100;
Anteil2 = Stimmen2 / Summe * 100;
Anteil3 = 100 - Anteil1 - Anteil2;
/* Bestimmung des ersten Platzes durch else-if */
if (Stimmen1 > Stimmen2 && Stimmen1 > Stimmen3) {
Platz1=Kandidat1;
StimmenPlatz1 = Stimmen1;
/* Bestimmung des zweiten und dritten Platzes durch if-else */
if (Stimmen2 > Stimmen3) {
Platz2=Kandidat2;
StimmenPlatz2 = Stimmen2;
Platz3=Kandidat3;
StimmenPlatz3 = Stimmen3;
} else {
Platz2=Kandidat3;
StimmenPlatz2 = Stimmen3;
Platz3=Kandidat2;
StimmenPlatz3 = Stimmen2;
};
} else if (Stimmen2 > Stimmen1 && Stimmen2 > Stimmen3) {
Platz1=Kandidat2;
StimmenPlatz1 = Stimmen2;
if (Stimmen1 > Stimmen3) {
Platz2=Kandidat1;
StimmenPlatz2 = Stimmen1;
Platz3=Kandidat3;
StimmenPlatz3 = Stimmen3;
} else {
Platz2=Kandidat3;
StimmenPlatz2 = Stimmen3;
Platz3=Kandidat1;
StimmenPlatz3 = Stimmen1;
};
} else if (Stimmen3 > Stimmen2 && Stimmen3 > Stimmen1) {
Platz1=Kandidat3;
StimmenPlatz1 = Stimmen3;
if (Stimmen1 > Stimmen2) {
Platz2=Kandidat1;
StimmenPlatz2 = Stimmen1;
Platz3=Kandidat2;
StimmenPlatz3 = Stimmen2;
} else {
Platz2=Kandidat2;
StimmenPlatz2 = Stimmen2;
Platz3=Kandidat1;
StimmenPlatz3 = Stimmen1;
};
}
/* Abstand zwischen erst-, zweit-, und drittplatziertem Kandidaten | Berechnung der prozentualen Abstaende */
double abstandZweitgroesste = ((double) (StimmenPlatz1 - StimmenPlatz2) / StimmenPlatz1) * 100;
double abstandDrittgroesste = ((double) (StimmenPlatz1 - StimmenPlatz3) / StimmenPlatz1) * 100;
/* Ausgabe unserer Berechnungen */
System.out.println("Erstplatzierter wurde: " + Platz1);
System.out.println("Er gewann mit " + StimmenPlatz1 + " Stimmen");
System.out.println("");
System.out.println("Die zweitgroesste Zahl ist: " + StimmenPlatz2 + " (Abstand: " + abstandZweitgroesste + "%)");
System.out.println("Die drittgroesste Zahl ist: " + StimmenPlatz3 + " (Abstand: " + abstandDrittgroesste + "%)");
System.out.println("Bis zur naechsten Schulsprecherwahl!");
}
}
In der Aufgabenstellung wird gefordert, dass wir folgende Funktionen in unseren Code implementieren:
- Die Namen der Kandidaten
- Anzahl der Stimmen für die Kandidaten
- Stimmen aller Kandidaten zusammenrechnen
- Prozentuale Ausrechnung der Stimmen pro Kandidat
- Stimmen vergleich um sie nach Platzierung zu sortieren
- Gesmtanzahl der Stimmen
- Prozentualer Anteil der Stimmen pro Kandidat (außer für Platz 1)
- Ausgabe der Kandidaten nach Platzierung
1. Eingabe: Kandidaten und Stimmen
Wir wollen eine Nutzereingabe erstellen, mit welcher wir Kandidaten erstellen und ihnen eine Stimmenanzahl zuweisen können.
Dazu müssen wir jeweils Variablen deklarieren und diese dann
initialisieren.
Wir initialisieren Sie, indem wir X = InOut.readY("Fragestellung: "); verwenden. Dabei ersetzen wir das X mit dem Variablennamen,
welchen wir für unsere Variable verwendet haben und Y mit dem Variablentypen (Datentypen) unserer Variable. Ein Beispiel könnte so aussehen:
int Stimmen1;
String Kandidat1="";
Kandidat1 = InOut.readString("Name des ersten Kandidaten: ");
Stimmen1 = InOut.readInt("Wie viele Stimmen hat " + Kandidat1 + ":");
/* Durch schließen der Anführungszeichen, setzen des + und das darauf folgen
* einer Variable kann die String Variable in der Konsole als Text erscheinen.
*
*
* Hier ein Beispiel der Konsole:
* Name des ersten Kandidaten: Peter
* Wie viele Stimmen hat Peter: 0
*/
2. Berechnungen: Zusammenrechnung, Prozente und Platzierung
Da die Eingabe nun vollendet ist, müssen wir mit den uns zugeteilten Werten einige Rechnungen anstellen, um an das gewünschte Ergebnis zu gelangen.
2.1 Zusammenrechnung aller Stimmen
Um alle Stimmen zusammenrechnen zu können benötigen wir eine Addition, welche alle Stimmen zusammenzählt. Dieser Schritt ist noch der einfachste, falls du hier schon nicht weiter weißt, solltest du dir die Grundlagen nochmal gründlich anschauen.
int Stimmen1=0, Stimmen2=0, Stimmen3=0, Summe=0;
Stimmen1 = InOut.readInt("Wie viele Stimmen hat Kandidat1: ");
Stimmen2 = InOut.readInt("Wie viele Stimmen hat Kandidat2: ");
Stimmen3 = InOut.readInt("Wie viele Stimmen hat Kandidat3: ");
/* Einfache Addition aller Stimmen zu einer Variable */
Summe = Stimmen1 + Stimmen2 + Stimmen3;
2.2 Prozentualer Anteil an allen Stimmen
Wir wollen jetzt die genaue Prozentzahl, die ein Kandidat an Stimmen bekommen hat, bestimmen. Dazu müssen wir eine Rechnung durchführen, die die Summe aller Stimmen mit 100 multipliziert und dann durch die Anzahl der Stimmen eines Kandidaten teilt. Dadurch erhalten wir unsere Prozentzahl. Um diese Zahl dann auszugeben, verwenden wir InOut.format2(X) . Das X ist in dem Fall wieder unsere Variable und sie wird durch das InOut.format2() auf 2 Nachkommastellen gerundet.
/* Beispielzuweisung für die Stimmen. */
int Stimmen1=34, Stimmen2=69, Stimmen3=27, Summe=0;
double Anteil1, Anteil2, Anteil3;
/* Bestimmung der Prozente */
Summe = Stimmen1 + Stimmen2 + Stimmen3;
Anteil1 = Stimmen1 / Summe * 100;
Anteil2 = Stimmen2 / Summe * 100;
Anteil3 = 100 - Anteil1 - Anteil2;
System.out.println("Anteil aller Stimmen von Kandidat1: " + InOut.format2(Anteil1) + "%");
System.out.println("Anteil aller Stimmen von Kandidat2: " + InOut.format2(Anteil2) + "%");
System.out.println("Anteil aller Stimmen von Kandidat3: " + InOut.format2(Anteil3) + "%");
2.3 Platzierung von Kandidaten bestimmen
Wir wollen jetzt die genaue Prozentzahl, die ein Kandidat an Stimmen bekommen hat, bestimmen. Dazu müssen wir eine Rechnung durchführen, die die Summe aller Stimmen mit 100 multipliziert und dann durch die Anzahl der Stimmen eines Kandidaten teilt. Dadurch erhalten wir unsere Prozentzahl. Um diese Zahl dann auszugeben, verwenden wir InOut.format2(X) . Das X ist in dem Fall wieder unsere Variable und sie wird durch das InOut.format2() auf 2 Nachkommastellen gerundet. Unsere else if hilft uns, die IF Ketten direkt aneinander zu reihen, falls die IF-Schleife dadrüber nicht wahr ist. Und durch die Bedingung (Stimmen1 > Stimmen2 && Stimmen1 > Stimmen3) können wir mehrere Bedingungen auf einmal überprüfen. Dafür sorgt das && .
/* Beispielzuweisung für die Stimmen. */
String Kandidat1="Nicolas", Kandidat2="Sebastian", Kandidat3="Ackermann", Platz1="", Platz2="", Platz3="";
int Stimmen1=34, Stimmen2=69, Stimmen3=27, Summe=0, StimmenPlatz1=0, StimmenPlatz2=0, StimmenPlatz3=0;
double Anteil1, Anteil2, Anteil3;
/* Bestimmung der Prozente */
Summe = Stimmen1 + Stimmen2 + Stimmen3;
Anteil1 = Stimmen1 / Summe * 100;
Anteil2 = Stimmen2 / Summe * 100;
Anteil3 = 100 - Anteil1 - Anteil2;
/* Bestimmung des ersten Platzes durch else-if */
if (Stimmen1 > Stimmen2 && Stimmen1 > Stimmen3) {
Platz1=Kandidat1;
StimmenPlatz1 = Stimmen1;
/* Bestimmung des zweiten und dritten Platzes durch if-else */
if (Stimmen2 > Stimmen3) {
Platz2=Kandidat2;
StimmenPlatz2 = Stimmen2;
Platz3=Kandidat3;
StimmenPlatz3 = Stimmen3;
} else {
Platz2=Kandidat3;
StimmenPlatz2 = Stimmen3;
Platz3=Kandidat2;
StimmenPlatz3 = Stimmen2;
};
} else if (Stimmen2 > Stimmen1 && Stimmen2 > Stimmen3) {
Platz1=Kandidat2;
StimmenPlatz1 = Stimmen2;
if (Stimmen1 > Stimmen3) {
Platz2=Kandidat1;
StimmenPlatz2 = Stimmen1;
Platz3=Kandidat3;
StimmenPlatz3 = Stimmen3;
} else {
Platz2=Kandidat3;
StimmenPlatz2 = Stimmen3;
Platz3=Kandidat1;
StimmenPlatz3 = Stimmen1;
};
} else if (Stimmen3 > Stimmen2 && Stimmen3 > Stimmen1) {
Platz1=Kandidat3;
StimmenPlatz1 = Stimmen3;
if (Stimmen1 > Stimmen2) {
Platz2=Kandidat1;
StimmenPlatz2 = Stimmen1;
Platz3=Kandidat2;
StimmenPlatz3 = Stimmen2;
} else {
Platz2=Kandidat2;
StimmenPlatz2 = Stimmen2;
Platz3=Kandidat1;
StimmenPlatz3 = Stimmen1;
};
}
/* Abstand zwischen erst-, zweit-, und drittplatziertem Kandidaten | Berechnung der prozentualen Abstände */
double abstandZweitgroesste = ((double) (groesste - zweitgroesste) / groesste) * 100;
double abstandDrittgroesste = ((double) (groesste - drittgroesste) / groesste) * 100;
/* Ausgabe unserer Berechnungen */
System.out.println("Erstplatzierter wurde: " + Platz1);
System.out.println("Er gewann mit " + StimmenPlatz1 + " Stimmen");