Die letzten 10 Beiträge |
123michi19 |
Alles klar, vielen Dank
|
Karlito |
Hi,
in java geht soetwas nicht. In C und C++ ist es so, dass 0 false ist und alles ungleich 0 ist true. In C wäre also folgendes möglich:
code: |
1:
2:
3:
4:
5:
|
int schaltjahr = 0; //int ist hier Absicht, da reines C keinen eigenen Datentyp für logische Werte hat
schaltjahr = !(jahr % 4) && (jahr % 100) || !(jahr % 400);
|
|
Du merkst aber sicher, dass das furchtbar schwer zu lesen ist.
In java ginge noch folgendes:
code: |
1:
2:
3:
4:
5:
6:
7:
|
bool schaltjahr = false;
schaltjahr &= (jahr % 4) == 0;
schaltjahr &= (jahr % 100) != 0;
schaltjahr |= (jahr % 400) == 0;
|
|
oder
code: |
1:
2:
3:
4:
5:
|
bool schaltjahr = false;
schaltjahr = (jahr % 4) == 0 && (jahr % 100) != 0 || (jahr % 400) == 0;
|
|
Ist aber auch schwer zu lesen.
Gruß,
Karlito |
123michi19 |
Ich vermute, dass es so nicht gehen kann, da Boolesche Ausdrücke nur true oder false kennen? |
123michi19 |
Da fällt mir doch glatt noch was ein, was ich schon die ganze Zeit fragen wollte.
Ist es möglich zu schreiben,
if (x geteilt durch 400 = wahr) ? |
123michi19 |
Besten Dank :-) |
eulerscheZahl |
Wie so oft gibt es mehrere Möglichkeiten:
code: |
1:
2:
3:
4:
|
boolean schaltjahr = false;
if (jahr % 400 == 0) schaltjahr = true;
else if (jahr % 100 == 0) schaltjahr = false;
else if (jahr % 4 == 0) schaltjahr = true; |
|
oder
code: |
1:
2:
3:
4:
|
boolean schaltjahr = false;
if (jahr % 4 == 0) schaltjahr = true;
if (jahr % 100 == 0) schaltjahr = false;
if (jahr % 400 == 0) schaltjahr = true; |
|
oder
code: |
1:
|
boolean schaltjahr = jahr % 400 == 0 || jahr % 4 == 0 && jahr % 100 != 0; |
|
Die Regel mit 400 Jahren ist wichtiger als die für 4 Jahre, also darf sie von letzterer nicht überschrieben werden. Das erreichst du, indem du die für 4 Jahr entweder nur ausführst, wenn vorher keine gegriffen hat (mit else) oder indem du die für 400 Jahr zuletzt beachtest und das vorherige Ergebnis überschreibst. Natürlich kann man auch alles in eine Zeile packen. |
123michi19 |
Vielen Dank für die Antwort. Jetzt muss ich mir helfen lassen, da ich alleine nicht weiterkomme.
Die Aufgabenstellung ist eigentlich relativ simple, aber ich hänge seit Stunden daran fest.
Schreiben Sie ein Programm, dass für eine Jahreszahl ausgibt, ob es sich um ein Schaltjahr handelt oder nicht.
Hinweis: Jahreszahlen, die durch 4 teilbar sind, sind Schaltjahre (z.B.2004). Das gilt jedoch nicht, wenn die Jahre durch 100 teilbar sind (z.B. war 1900 kein Schaltjahr). Sind die Jahre jedoch zusätzlich durch 400 teilbar, handelt es sich wieder um Schaltjahre (z.B.2000).
Ich überlege die ganze Zeit schon, welche Bedingung da zuerst erfüllt werden muss? |
eulerscheZahl |
if (x < y && y == z)
das oder kriegst du mit ||
hier wird jeweils erst nur der erste Teil getestet und dann das weitere Vorgehen entschieden. (wenn bei and der erste Teil falsch ist, kann die Gesamtaussage nicht mehr wahr werden)
Das hat den Vorteil, dass du z.B. sicherstellen kannst, dass du nicht außerhalb das Arrays bist, bevor du einen Teil davon ausliest.
Eine Verknüpfung, die beide Aussagen prüft, kriegst du mit & bzw. |
Wenn du und mit oder kombinierst, hat und die stärkere Bindung (wie Punkt vor Strich, mit und als Punkt) |
123michi19 |
Noch eine kurze Zweitfrage:
Wenn ich angeben möchte, dass
if (x<y) AND (y==z)
gelten soll, wie schreibe ich das denn am Besten? (Die Variablen habe ich natürlich zuvor deklariert)
Vielen Dank :-) |
123michi19 |
Besten Dank
In der Vorlesung hat die Dozentin extra noch davor gewarnt
|
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |
|
|