| 

.NET C# Java Javascript Exception

2
Hallo,

wie kann ich durch eigene Berechnung selbst ermitteln, ob es sich um ein Schaltjahr handelt?

Liebe Grüsse

Roni
13.10.2013
roni 137 2 5
2 Antworten
2
Eine Möglichkeit:

public static void Main(string[] args)
{
int y = 1804; // Jahreszahl

if (IsLeapYear(y))
Console.Write("\n\n\t" + y.ToString() + " ist ein Schaltjahr\n\n");
else
Console.Write("\n\n\t" + y.ToString() + " ist kein Schaltjahr\n\n");

if (IsLeapYear2(y))
Console.Write("\n\n\t" + y.ToString() + " ist ein Schaltjahr\n\n");
else
Console.Write("\n\n\t" + y.ToString() + " ist kein Schaltjahr\n\n");

Console.Write("\n\tPress any key to continue . . . ");
Console.ReadKey(true);
}

private static bool IsLeapYear(int y)
{
if((((y % 4 == 0) && (y % 100 != 0))?1:(y % 400 == 0) ? 1 : 0) == 0)
return false;
else
return true;
}

// Ergänzung: Lösung von Matthias Hlawatsch
private static bool IsLeapYear2(int year)
{
return year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
}

// Hab den Code mal um die Lösung von Matthias Hlawatsch ergänzt (s. weiter unten).
// Jetzt kann man selbst auswählen.
13.10.2013
Falkner 795 3 9
1
Warum nicht einfach
DateTime.IsLeapYear() ?

Und wenn schon selbst geschrieben, dann geht das auch als Einzeiler, ohne Fragezeichen und mit ein paar Klammern weniger:
Func<int, bool> isLeapYear = (int year) => year % 400 == 0 || year % 4 == 0 && year % 100 != 0;

In beiden Fällen wendet man die Regeln des Gregorianischen Kalenders an, der Ende des 16. Jahrhunderts ersonnen wurde. IsLeapYear(1500) wäre also streng genommen eine ArgumentOutOfRangeException wert, was aber auch die DateTime-Klasse nicht macht.

Falls man die Regeln anderer Kalender braucht, läßt einen .NET aber auch nicht allein:
new System.Globalization.JulianCalendar().IsLeapYear(1900); //true!
13.10.2013
Matthias Hlawatsch 13,2k 4 9
Wäre zu einfach. :-)
Aber es sieht eher so aus, dass "roni" eine Aufgabe erhalten hat, sich aber keine Gedanken machen wollte und mal eben hier angefragt hat, ob nicht jemand einen fertigen Code hat. Ich kann mich aber auch irren.
lbm1305 14.10.2013
Wenn dem so wäre, wünschte ich ihm einen aufmerksamen Aufgabensteller, der ihn freundlich, aber bestimmt auffordert, sein Ergebnis mal ein wenig zu erklären ;-)

Ich war trotzdem so frei, meine Antwort noch ein wenig zu erweitern. Hatte gestern nur mein Handy zur Verfügung, da tippt es sich nicht so leicht...
Matthias Hlawatsch 14.10.2013
@Matthias Hlawatsch: Hab deine Lösung m. i. den Code eingebaut. Jetzt kann jeder seine "Traumlösung" auswählen.
Falkner 14.10.2013
@Falkner: Merci. Ich hab oben noch einen Schnörkel ausgebaut. Den Lambda-Ausdruck hatte ich hier nur verwendet, um es etwas schlanker hinschreiben zu können. Wenn man wie Du sowieso eine Methode definiert, dann ist die unnötig.
Matthias Hlawatsch 14.10.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH