Moin,
ich habe ein Problem mit der Ausgabe bei meinem Programm.
Das Programm liest Noten ein prüft diese auf Gültigkeit und spuckt eine Statistik aus. Soweit so gut. ( Das Programm sieht ziemlich wild aus, aber läuft, und ich kann es nachvollziehen - ich bin Neuling... ).
Anmerkungen:
- Akzeptierte Noten sind (1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 5,0 -> Punkt ist auch erlaubt! also ganze.Zehntel oder ganze,Zehntel)
In der Ausgabe sollte stehen:
- "wegen Formatfehler ignoriert" -> bei Buchstaben oder bei einer Note länger als 3 Zeichen oder bei Verwendung falscher Trennzeichen zB - oder ; ...
- "..Vorkommastelle ignoriert" -> Wenn die Zahl an erster Stelle kleiner als 1 bzw. größer als 5 ist - allerdings nicht wenn es keine ganze Zahl ist, denn das ist ja ein Formatfehler
- "... Nachkommastelle ignoriert" -> Wenn das Zehntel an der 3. Stelle nicht 0, 3 oder 7 ist bzw. wenn Stelle 1 eine 4 oder eine 5 ist, dann ist nur eine 0 erlaubt.
Zu meinem Problem:
Ich schaffe es nicht, dass er mir sobald ein Buchstabe dabei ist, z.B. bei "2.x" als Eingabe, einen Formatfehler anstelle von Fehler wegen Nachkommastelle auswirft. Das gleiche wenn ein Buchstabe vor dem Komma bzw. Punkt steht (z.B. x,3)..
Muss ich hierzu die Switch nochmals verschachteln oder anders aufbauen oder muss ich vorher prüfen ob es sich um ein Digit handelt? :/
Wäre euch mega dankbar, wenn mir jemand weiterhelfen könnte =)
Vielen Dank!
Code:
ich habe ein Problem mit der Ausgabe bei meinem Programm.
Das Programm liest Noten ein prüft diese auf Gültigkeit und spuckt eine Statistik aus. Soweit so gut. ( Das Programm sieht ziemlich wild aus, aber läuft, und ich kann es nachvollziehen - ich bin Neuling... ).
Anmerkungen:
- Akzeptierte Noten sind (1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 5,0 -> Punkt ist auch erlaubt! also ganze.Zehntel oder ganze,Zehntel)
In der Ausgabe sollte stehen:
- "wegen Formatfehler ignoriert" -> bei Buchstaben oder bei einer Note länger als 3 Zeichen oder bei Verwendung falscher Trennzeichen zB - oder ; ...
- "..Vorkommastelle ignoriert" -> Wenn die Zahl an erster Stelle kleiner als 1 bzw. größer als 5 ist - allerdings nicht wenn es keine ganze Zahl ist, denn das ist ja ein Formatfehler
- "... Nachkommastelle ignoriert" -> Wenn das Zehntel an der 3. Stelle nicht 0, 3 oder 7 ist bzw. wenn Stelle 1 eine 4 oder eine 5 ist, dann ist nur eine 0 erlaubt.
Zu meinem Problem:
Ich schaffe es nicht, dass er mir sobald ein Buchstabe dabei ist, z.B. bei "2.x" als Eingabe, einen Formatfehler anstelle von Fehler wegen Nachkommastelle auswirft. Das gleiche wenn ein Buchstabe vor dem Komma bzw. Punkt steht (z.B. x,3)..
Muss ich hierzu die Switch nochmals verschachteln oder anders aufbauen oder muss ich vorher prüfen ob es sich um ein Digit handelt? :/
Wäre euch mega dankbar, wenn mir jemand weiterhelfen könnte =)
Vielen Dank!
Code:
Code:
import java.util.Locale;
import java.util.Scanner;
public final class Statk {
private static final Scanner EINGABE = new Scanner(System.in);
public static void main(String[] args) {
Locale.setDefault(Locale.GERMANY);
System.out.println("Noten im Format Ganze,Zehntel " + "oder Ganze.Zehntel eingeben (Ende mit Strg-D):");
float notensumme = 0;
float notensummeBestandene = 0;
int anzahlBestandene = 0;
int anzahlDurchgefallene = 0;
float besteNote = 6;
float schlechtesteNote = 0;
while (EINGABE.hasNext()) {
String note = EINGABE.next();
int laenge = note.length();
if (laenge != 3) {
System.out.println("Note " + note + " wird wegen Formatfehler ignoriert!");
continue;
}
char stelle1 = note.charAt(0);
char stelle2 = note.charAt(1);
char stelle3 = note.charAt(2);
switch (stelle1) {
case '1':
case '2':
case '3':
switch (stelle3) {
case '0':
break;
case '3':
break;
case '7':
break;
default:
System.out.println("Note " + stelle1 + stelle2 + stelle3 + " Formatfehler " + stelle3 + " ignoriert!");
continue;
}
break;
case '4':
case '5':
if(stelle3 != '0') {
System.out.println("Note " + stelle1 + stelle2 + stelle3 + " wird wegen Nachkommastelle " + stelle3 + " ignoriert!");
}
break;
default:
System.out.println("Note " + stelle1 + stelle2 + stelle3 + " wird wegen Formatfehler ignoriert!");
continue;
}
switch (stelle2) {
case ',':
break;
case '.':
break;
default:
System.out.println("Note " + stelle1 + stelle2 + stelle3 + " wird wegen Formatfehler ignoriert!");
continue;
}
String stringKommanote = "" + stelle1 + '.' + stelle3;
String neuStringKomma = stringKommanote.replace("," , ".");
float gueltigeNote = Float.parseFloat(stringKommanote);
notensumme += gueltigeNote;
if (gueltigeNote <= 4) {
anzahlBestandene++;
} else {
anzahlDurchgefallene++;
}
if(gueltigeNote <= 4) {
notensummeBestandene += gueltigeNote;
}
if (gueltigeNote < besteNote) {
besteNote = gueltigeNote;
}
if (gueltigeNote > schlechtesteNote) {
schlechtesteNote = gueltigeNote;
}
}
float teilnehmerGesamt = anzahlBestandene + anzahlDurchgefallene;
int teilnehmerGesamtInt = (int) teilnehmerGesamt;
float durchschnitt = notensummeBestandene / anzahlBestandene; // Notensumme nur der bestandenen Noten
float durchfallquote = anzahlDurchgefallene / teilnehmerGesamt;
float durchfallquoteProzent = durchfallquote * 100;
System.out.println("Anzahl beruecksichtiger Noten " + teilnehmerGesamtInt);
System.out.println("Anzahl Bestandene: " + anzahlBestandene);
System.out.println("Schlechteste Note: " + schlechtesteNote);
System.out.println("Beste Note: " + besteNote);
System.out.printf("Durchschnitt Bestandene: %.1f%n", durchschnitt);
System.out.printf("Durchfallquote: %.1f", durchfallquoteProzent);
System.out.print("%");
System.out.println("");
}
}