Anfängerfrage(n): durch if, while Schleife von neuem starten
-
Hallo,
ich mache gerade ein Javatutorial durch. Dort kam ein ganz simpler Rechner zum Notendurchschnitt für Lehrer dran (auf Basis von int, ohne Überprüfungen etc.). Da ich aber dank Java ist auch eine Insel schon ein bisschen mehr weiß, wollte ich die Schleife erweitern, komme aber mit einem Problem trotz nicht ganz weiter.
Hier erstmal der Code:package firstProject; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); double grade, average; double counter = 0; double total = 0; System.out.println("Geben Sie die Anzahl der Arbeiten ein "); double choice = input.nextDouble(); while (counter < choice) { System.out.println("Geben Sie die Note ein: "); grade = input.nextDouble(); if (grade > 7) { System.out.println("Falsche Eingabe, Zahl muss <=6 sein, nochmal!"); break; }else { total = total + grade; counter++; } } average = total / choice; System.out.println("Der Notendurchschnitt beträgt: "+ average); } }
Ich will nun also, wenn der Lehrer, bei der Noteneingabe etwas größeres als eine 6 wählt, die Schleife und Zählung von vorne beginnen. Wie könnte ich das am besten umsetzen Irgendwie komme ich da nicht weiter...
Außerdem hätte ich noch eine weitere kleine Frage: Am Schluß wird ja ein langer double Wert in der println ausgegeben, den würde ich gerne auf 2 Stellen begrenzt haben (muss nicht gerundet werden!). Normal geht das ja indem ich das einfach mit printf("Der N.. beträgt: %.2lf", average) mache, da wird mir aber irgendwie ein unverständlicher Fehler ausgepuckt
Vielen Dank für die Hilfe, sonstige Optimierungsvorschläge nehme ich natürlich auch immer gerne an!!!
-
???
if (grade > 6) { System.out.println("Falsche Eingabe, Zahl muss <=6 sein, nochmal!"); counter = 0; }
-
IBV schrieb:
???
if (grade > 6) { System.out.println("Falsche Eingabe, Zahl muss <=6 sein, nochmal!"); counter = 0; }
Hässlich - Denkfehler, danke!
Weiß jemand noch was wegen der Ausgabe, begrenzt auf 2 Stellen?
-
System.out.printf("%.2f", 3.14159);
-
zum Beginn einer Schleife springt man mit
continue;
, die Variablen musst du dann halt noch zurücksetzten.Warum verwendest du überall double ? Möchtest du auch beispielsweise die Note 2.3 akzeptieren? Generell würde ich den Datantyp verwenden, der der Funktion der Variable entspricht, also in diesem Fall
int
fürchoice
undcounter
, da die Variablen nurint
Werte annehmen sollen, und beigrade
nurdouble
, wenn du auch ungerade Noten verwenden willst.Es funktioniert im Übrigen auch sowas:
System.out.println("Der Notendurchschnitt betraegt: "+ total / choice);
Du kannst statt
println
auchSystem.out.print();
verwenden. Hat keinen Zeilenumbruch, also wäre z.B. die Eingabe in der selben Zeile wie die Aufforderung dazu. Sieht (finde ich) etwas schöner aus.
-
KJoke schrieb:
und bei
grade
nurdouble
, wenn du auch ungerade Noten verwenden willst.Ungerade Noten? Also 3 zum Beispiel?!
-
nicht ganzzahlige Noten meinte ich damit, also z.B. 3,3.
-
if (grade < 1 || grade > 6) { System.out.println("Falsche Eingabe, Zahl muss zwischen 1 und 6 sein, nochmal!"); counter = 0; continue; }
Bedenke bei der Überprüfung auch, dass nicht nur die Obergrenze von 6 nicht überschritten werden darf, sondern gleichzeitig auch nicht die Untergrenze von 1 unterschritten werden darf.
Und wie einer meiner Vorredner schon sagte: Zum Anfang einer Schleife kann man mit continue zurückspringen.
-
Jolka schrieb:
if (grade < 1 && grade > 6) { System.out.println("Falsche Eingabe, Zahl muss zwischen 1 und 6 sein, nochmal!"); counter = 0; continue; }
Bedenke bei der Überprüfung auch, dass nicht nur die Obergrenze von 6 nicht überschritten werden darf, sondern gleichzeitig auch nicht die Untergrenze von 1 unterschritten werden darf.
Richtig, aber das && sollte durch ein || ersetzt werden.
L. G.,
IBV
-
IBV schrieb:
Jolka schrieb:
if (grade < 1 && grade > 6) { System.out.println("Falsche Eingabe, Zahl muss zwischen 1 und 6 sein, nochmal!"); counter = 0; continue; }
Bedenke bei der Überprüfung auch, dass nicht nur die Obergrenze von 6 nicht überschritten werden darf, sondern gleichzeitig auch nicht die Untergrenze von 1 unterschritten werden darf.
Richtig, aber das && sollte durch ein || ersetzt werden.
L. G.,
IBVHuch, ja richtig.
-
noch eine kurze Info:
double grade, average; double counter = 0; double total = 0;
Wird beim programmieren nicht gerne gesehen.
Es sollten immer alle Daten bei der Erstellung einen Wert bekommen.
So wird es bei einem längeren Code schnell unübersichtlich.double grade= 0; double average = 0; double counter = 0; double total = 0;