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ür choice und counter , da die Variablen nur int Werte annehmen sollen, und bei grade nur double , 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 auch System.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 nur double , 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.,
    IBV

    Huch, 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;
    

Anmelden zum Antworten