In der Schule haben wir als Übung zu Arrays die Aufgabe bekommen folgendes Programm zu schreiben: in einem Verein gibt es Wahlen, wobei 40 Mitglieder zur Wahl stehen, jedem wird eine Nummer von 1-40 zugeordnet. Ein Mitglied des Vereins soll die Stimmzettel auszählen und gibt die Nummer der Person ein die auf dem Wahlzettel steht. Ausgegeben werden sollen am ende die Nummern der Personen die gewählt wurden, mit der Anzahl der Stimmen die sie bekommen haben. Ungültig sind alle Zettel, die keine Zahl von 1-40 enthalten. Die Anzahl der gültigen und ungültigen Stimmen soll auch gezählt werden. Die Eingabe wird bei mir mit Text beendet, welcher auch als ungültig zählt.
Dort liegt in meinem Programm auch der Fehler. Wenn ich zuerst eine ungültige Zahl eingebe, also z.b 42 und dann 40 und andere Zahlen eingebe, wird die Eingabe zum beenden immer als gültig gezählt, wenn ich anders anfange oder das Programm direkt mit Text beende, wird alles richtig gezählt.
(Die einzelnen Ausgaben in den if-Anweisungen sollen zeigen, wie das Programm abläuft):
Mit diesem Quelltext tritt der Fehler auf, wenn ich es anders programmiere und die Texteingabe explizit als ungültig erkläre funktioniert es:
Dort liegt in meinem Programm auch der Fehler. Wenn ich zuerst eine ungültige Zahl eingebe, also z.b 42 und dann 40 und andere Zahlen eingebe, wird die Eingabe zum beenden immer als gültig gezählt, wenn ich anders anfange oder das Programm direkt mit Text beende, wird alles richtig gezählt.
(Die einzelnen Ausgaben in den if-Anweisungen sollen zeigen, wie das Programm abläuft):
Code:
import java.util.*;
public class Waehlen{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int gueltigeStimmen = 0;
int ungueltigeStimmen = 0;
int [] wahlliste = new int[40];
int gewaehlterKandidat = 0;
String istFertig = "";
while(!(istFertig.equals("Ergebnis") || istFertig.equals("ergebnis"))){
System.out.println("Geben Sie die Nummer des gewaehlten Kandidaten ein. Wenn Sie fertig sind schreiben Sie \"Ergebnis\"");
if(!sc.hasNextInt()){
istFertig = sc.next();
System.out.println("istFertig");
ungueltigeStimmen --;
}
else{
gewaehlterKandidat = sc.nextInt();
System.out.println("gewaehlterKandidat" + gewaehlterKandidat);
}
if(gewaehlterKandidat > 0 && gewaehlterKandidat < 41){
gueltigeStimmen++;
wahlliste[gewaehlterKandidat-1] = wahlliste[gewaehlterKandidat-1] + 1;
System.out.println("gueltig");
}
else{
ungueltigeStimmen++;
System.out.println("ungueltig");
}
}
System.out.println("-------------- Ergebnis --------------");
for(int i = 0; i < wahlliste.length; i++){
if(!(wahlliste == 0)){
if(i<9){
System.out.println("Kandidat 0" + (i+1) + " hat " + wahlliste + " Stimme(n) erhalten");
}
else{
System.out.println("Kandidat " + (i+1) + " hat " + wahlliste + " Stimme(n) erhalten");
}
}
}
System.out.println(" Gueltige Stimmen: " + gueltigeStimmen + "\nUngueltige Stimmen: " + ungueltigeStimmen);
}
}
Mit diesem Quelltext tritt der Fehler auf, wenn ich es anders programmiere und die Texteingabe explizit als ungültig erkläre funktioniert es:
Code:
import java.util.*;
public class Wahlen{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int gueltigeStimmen = 0;
int ungueltigeStimmen = -1;
int [] wahlliste = new int[40];
int gewaehlterKandidat = 0;
String istFertig = "";
while(!(istFertig.equalsIgnoreCase("Ergebnis"))){
System.out.println("Geben Sie die Nummer des gewaehlten Kandidaten ein. Wenn Sie fertig sind schreiben Sie \"Ergebnis\"");
if(sc.hasNextInt()){
gewaehlterKandidat = sc.nextInt();
System.out.println("gewaehlterKandidat" + gewaehlterKandidat);
}
else{
istFertig = sc.next();
System.out.println("istFertig");
}
if(gewaehlterKandidat < 1 || gewaehlterKandidat > 40 || !istFertig.equals("")){
ungueltigeStimmen++;
System.out.println("ungueltig");
}
else{
wahlliste[gewaehlterKandidat-1] = wahlliste[gewaehlterKandidat-1] + 1;
gueltigeStimmen++;
System.out.println("gueltig");
}
}
System.out.println("-------------- Ergebnis --------------");
for(int i = 0; i < wahlliste.length; i++){
if(!(wahlliste == 0)){
if(i<9){
System.out.println("Kandidat 0" + (i+1) + " hat " + wahlliste + " Stimme(n) erhalten");
}
else{
System.out.println("Kandidat " + (i+1) + " hat " + wahlliste + " Stimme(n) erhalten");
}
}
}
System.out.println(" Gueltige Stimmen: " + gueltigeStimmen + "\nUngueltige Stimmen: " + ungueltigeStimmen);
}
}