Hallo zusammen,
ich bin gerade dabei über das Buch "Programmieren lernen mit Java" von Hans Peter Habelitz Java zu lernen.
Dabei bin ich noch recht am Anfang bei if else Verzweigungen. Die Lektion wird mit Übungsaufgaben abgeschlossen, wobei ich bei einer ein Verständnisproblem habe. Um genau zu sein, habe ich die Aufgabe gelöst und das Programm funktioniert auch, doch es scheint so, als ob ich deutlich zu kompliziert gedacht habe. Der Code in der Lösung zur Aufgabe ist deutlich weniger komplex. Ich verstehe jedoch nicht wie dieser funktionieren kann, denn mir erscheint das zu einfach, bzw. sieht es für mich so aus, als ob nicht alle Fälle korrekt abgedeckt sind.
Die Aufgabe lautet, man soll ein Programm erstellen, in das man eine Jahrezahl eingibt, worauf das Programm prüft, ob es ein Schaltjahr ist und dies entsprechend ausgibt. Dabei ist zu beachten, dass ein Schaltjahr durch 4 teilbar ist. Außer es ist gleichzeitig auch durch 100 teilbar, dann ist es kein Schaltjahr. Es sei denn die Jahreszahl ist gleichzeitig durch 400 teilbar, dann ist es ein Schaltjahr. Hier einmal mein Code, wie ich das gelöst hatte:
[CODE lang="java" title="Schaltjahr"]import javax.swing.JOptionPane;
public class Schaltjahr {
public static void main (String[] args) {
var jahr = JOptionPane.showInputDialog(null,
"Bitte gib eine Jahreszahl ein: ");
var jahrParsed = Integer.parseInt(jahr);
var teilbar4 = jahrParsed % 4;
var teilbar100 = jahrParsed % 100;
var teilbar4u100 = teilbar4 + teilbar100;
var teilbar400 = jahrParsed % 400;
if (teilbar4 == 0) {
if (!(teilbar4u100 == 0)) {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist ein Schaltjahr!");
} else {
if ((teilbar4 == 0) && (teilbar100 == 0) && (teilbar400 == 0)) {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist ein Schaltjahr!");
} else {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist kein Schaltjahr!");
}
}
} else {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist kein Schaltjahr!");
}
}
}[/CODE]
Hier wie es im Buch gelöst wurde:
[CODE lang="java" title="Lösung"]var jahr = Integer.parseInt(JOptionPane
.showInputDialog("Geben Sie eine Jahreszahl ein:"));
if ((jahr % 400) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist ein Schaltjahr!");
} else {
if ((jahr % 100) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist kein Schaltjahr!");
} else {
if ((jahr % 4) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist ein Schaltjahr!");
} else {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist kein Schaltjahr!");
}
}[/CODE]
Dass ich das mit den Variablen etwas umständlich gelöst habe ist soweit klar. Was ich nicht verstehe sind die if abfragen, bzw. die Ausdrücke die hier abgeprüft werden. Ich habe das Gefühl, dass das so wie es im Buch gelöst wurde nicht hinhauen kann, oder ich habe einen totalen Denkfehler.
Vielleicht kann mir jemand auf die Sprünge helfen, wo ich hier gedanklich falsch abgebogen bin, bzw. mir erklären, warum die Lösung aus dem Buch funktioniert.
Viele Grüße
Chris
ich bin gerade dabei über das Buch "Programmieren lernen mit Java" von Hans Peter Habelitz Java zu lernen.
Dabei bin ich noch recht am Anfang bei if else Verzweigungen. Die Lektion wird mit Übungsaufgaben abgeschlossen, wobei ich bei einer ein Verständnisproblem habe. Um genau zu sein, habe ich die Aufgabe gelöst und das Programm funktioniert auch, doch es scheint so, als ob ich deutlich zu kompliziert gedacht habe. Der Code in der Lösung zur Aufgabe ist deutlich weniger komplex. Ich verstehe jedoch nicht wie dieser funktionieren kann, denn mir erscheint das zu einfach, bzw. sieht es für mich so aus, als ob nicht alle Fälle korrekt abgedeckt sind.
Die Aufgabe lautet, man soll ein Programm erstellen, in das man eine Jahrezahl eingibt, worauf das Programm prüft, ob es ein Schaltjahr ist und dies entsprechend ausgibt. Dabei ist zu beachten, dass ein Schaltjahr durch 4 teilbar ist. Außer es ist gleichzeitig auch durch 100 teilbar, dann ist es kein Schaltjahr. Es sei denn die Jahreszahl ist gleichzeitig durch 400 teilbar, dann ist es ein Schaltjahr. Hier einmal mein Code, wie ich das gelöst hatte:
[CODE lang="java" title="Schaltjahr"]import javax.swing.JOptionPane;
public class Schaltjahr {
public static void main (String[] args) {
var jahr = JOptionPane.showInputDialog(null,
"Bitte gib eine Jahreszahl ein: ");
var jahrParsed = Integer.parseInt(jahr);
var teilbar4 = jahrParsed % 4;
var teilbar100 = jahrParsed % 100;
var teilbar4u100 = teilbar4 + teilbar100;
var teilbar400 = jahrParsed % 400;
if (teilbar4 == 0) {
if (!(teilbar4u100 == 0)) {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist ein Schaltjahr!");
} else {
if ((teilbar4 == 0) && (teilbar100 == 0) && (teilbar400 == 0)) {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist ein Schaltjahr!");
} else {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist kein Schaltjahr!");
}
}
} else {
JOptionPane.showMessageDialog(null,
"Das Jahr "+jahr+" ist kein Schaltjahr!");
}
}
}[/CODE]
Hier wie es im Buch gelöst wurde:
[CODE lang="java" title="Lösung"]var jahr = Integer.parseInt(JOptionPane
.showInputDialog("Geben Sie eine Jahreszahl ein:"));
if ((jahr % 400) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist ein Schaltjahr!");
} else {
if ((jahr % 100) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist kein Schaltjahr!");
} else {
if ((jahr % 4) == 0) {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist ein Schaltjahr!");
} else {
JOptionPane.showMessageDialog(null, "Das Jahr " + jahr
+ " ist kein Schaltjahr!");
}
}[/CODE]
Dass ich das mit den Variablen etwas umständlich gelöst habe ist soweit klar. Was ich nicht verstehe sind die if abfragen, bzw. die Ausdrücke die hier abgeprüft werden. Ich habe das Gefühl, dass das so wie es im Buch gelöst wurde nicht hinhauen kann, oder ich habe einen totalen Denkfehler.
Vielleicht kann mir jemand auf die Sprünge helfen, wo ich hier gedanklich falsch abgebogen bin, bzw. mir erklären, warum die Lösung aus dem Buch funktioniert.
Viele Grüße
Chris