kann mir jemand erklären was hier gemacht wurde?

RememberdiAlamo

Aktives Mitglied
Ich habe hier eine java-Datei, bei der man die Monate in Quartale einteilen muss, weiß aber nicht wie diese Programmierung funktioniert. Hätte ich das selbst machen müssen, würde ich nie darauf kommen.
Ich kann die Rechnung nicht nachvollziehen: (monat-1)/3
Wie soll daraus für Januar (1-1)/3= 1. Quartal rauskommen?
Deswegen kann ich auch die case Anweisungen richtig nachvollziehen ???:L
Das Programm funktioniert zwar, weiß aber nicht wie!
 

Anhänge

Ein Jahr besteht aus 12 Monaten. Ein Quartal ist ein Viertel eines Jahres, besteht also aus 12 / 4 = 3 Monaten. Hilft dir das schon weiter oder brauchst du noch weitere Tipps? 😉
 
Vielleicht denkst du lieber bildlich? Du hast einen Zeitstrahl mit 12 Einheiten, dieser ist in 4 gleichgroße Abschnitte unterteilt - die haben also die Größe 3 Einheiten. Wenn du nun rausfinden möchtest, in welchem Abschnitt davon eine Zahl ist, teilst du die Zahl durch die Größe des Abschnitts - also durch 3.

Weil die Monate nicht von 0 bis 11, sondern von 1 bis 12 gezählt werden, muss das ganze noch verschoben werden, deshalb wird die Eins abgezogen. Jetzt werden also Zahlen zwischen 0 und 11 durch 3 geteilt, die möglichen Ergebnisse sind - nach Abrundung, da int verwendet wird - eben genau 0, 1, 2 und 3. Das switch-case gibt nun für diese 4 Fälle jeweils eine Meldung aus. 0 als Ergebnis entspricht dem 1. Quartal usw.

Besser?
 
hmm, gebe ich also 4 ein und es soll ja in der case-Anweisung dem 2. Quartal entsprechen. Dann rechnet das java wie? Es muss ja den 2. Quartal haben: Also (4-1)/3=1. Also deswegen case 1 = 2. Quartal 3: (7-1)/3= (case)2, also entspricht q3. Aye, ja, jetzt glaub ich ich habs!:idea:
Dankeschön!
Nur kann mir noch jemand sagen wie das ganze jetzt auf die 12 Monate begrenzt wird? Wenn ich jetzt 13 als Wert eingebe, dann kommt da nichts raus. Wie erkennt das java? Theoretisch wäre (13-1)/3= 4.
Dafür gibt es aber keine Case-Anweisung, deswegen kommt nichts raus, stimmts? Aber bei 11/3, rundet es nicht auf 4 auf?? Nein tut es nicht, ok.
 
Zuletzt bearbeitet:
Okey! Was ich jetzt folgendes machen will ist Folgendes: Ich will bei Zahlenwerten die größer als 13 sind, eine Fehlermeldung anzeigen lassen. Hab ich jetzt halbwegs geschafft. Jedoch nur bis zum Zahlenwert 15. Klar bei 16 würde ja 5 rauskommen

Ich hab jetzt hinzugefügt:
case 4: JOptionPane.showMessageDialog(null, "Ihr Monat liegt außerhalb des Gregorianischen Kalenders");

Ich will daraus jetzt aber größer gleich 4 machen: also:

case >=4: JOptionPane.showMessageDialog(null, "Ihr Monat liegt außerhalb des Gregorianischen Kalenders");
Damit für ALLE Zahlen oberhalb des Wertes die Meldung erscheint. Nur hab ich das Problem, dass dann der Fehler kommt: "illegal start of expression." Wenn ich die 4 ohne den größer gleich Zeichen mache, dann kommt der Fehler nicht, jedoch zählt es nur bis zum Zahlenwert 15. Kann mir da jemand weiterhelfen?
 
case kann nur konstante Ausdrücke als Wert nehmen, keine Bedingugen. Mir fallen zwei Lösungen ein:

1) Statt "case ..:" verwendest du "default:" - der Code hinter dem default: wird immer ausgeführt, wenn keiner der andere Fälle zutraf. Das würde bei dir für den gewünschten Effekt sorgen, dass alle anderen Fälle eine Fehlermeldung liefern.

2) Du prüfst die eingegebene Zahl direkt nach der Eingabe, bevor du irgendwas damit rechnest. Also mit einer if-Anweisung prüfen, ob sie zwischen 1 und 12 liegt.
 
rme: Vielen herzlichen Dank! 🙂
Hab das mit default gemacht und hat geklappt. Prüfe gleich mit der if-Anweisung, ob das klappt... muss ich das da machen wo die Variablen int q1, q2,q3,q4 festgelgt wurden?
 
Zuletzt bearbeitet:
jede Variable innerhalb einer Methode muss muss vor der Verwendung initialisiert werden oder? Mensch, ist das lange her mit java😱
Ok, vielen Dank nochmal. Ich werd mich da mal wieder reinarbeiten. 😉
 

Neue Themen


Zurück
Oben