BlueJ - vievielte tag im jahr berechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • BlueJ - vievielte tag im jahr berechnen

    Hey, ich muss anhand eines datums zb 4.5.2012 den kalnedertag errechen

    -> in dem Fall: 124
    ich könnte natürlich die monate einzeln als jan=31, feb=28 usw deklarieren und einfach für den mai + 4 rechnen um auf die 124 zu kommen.

    FRAGE A
    in VB (...hatte ich mal vor ewig vielen jahren...) gab es meiner meinung nach eine funktion, die das datum quasi von string in int umgewandelt hat sodass man einfach den kalendertag erhalten hat.
    -gibt es solch eine "datum in kalendertage funktion" auch für bluej oder geht es nur über meinen alternativen vorschlag?

    FRAGE B
    hinzu kommt noch, dass man das schaltjahr beachten soll -> habe zumindest schon eine funktionierende methode "schaltjahr" geschrieben.
    -angenommen der 4.5. ist ein schaltjahr, dann würde ich den februar doch einfach mit 29tagen berechnen ...true or false? ;)


    ich hoffe ihr könnt mir weiter helfen.
  • ach ja, wäre auch super zu wissen ob man:
    januar, märz, mai, juli, aug, okt, dez -> den wert 31 geben kann ohne dass man jan = 31; -> märz = 31; usw. schreiben muss. dient natürlich nur zur vereinfachung aber eventuell könnte ich es später für etwas anderes gebrauchen.
  • monat, jahr und tag gebe ich vorher manuell ein.
    So weit hab ich es, aber er spuckt kein ergebnis aus? Wo ist mein Fehler?

    public void tagImJahr()
    {
    int KTag = 0;
    int jan = 0;
    int feb = 28;
    int mar = 59;
    int apr = 89;
    int mai = 120;
    int jun = 150;
    int jul = 181;
    int aug = 212;
    int sep = 242;
    int okt = 273;
    int nov = 303;
    int dez = 334;


    if(jahr%4 == 0 && (jahr%100 != 0 || jahr%400 == 0)) feb = 29;

    switch (KTag)
    {
    case 1 : if(monat == 1) KTag = jan + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 2 : if(monat == 2) KTag = feb + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 3 : if(monat == 3) KTag = mar + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 4 : if(monat == 4) KTag = apr + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 5 : if(monat == 5) KTag = mai + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 6 : if(monat == 6) KTag = jun + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 7 : if(monat == 7) KTag = jul + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 8 : if(monat == 8) KTag = aug + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 9 : if(monat == 9) KTag = sep + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 10 : if(monat == 10) KTag = okt + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 11 : if(monat == 11) KTag = nov + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    case 12 : if(monat == 12) KTag = dez + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    }
    }
  • Tally schrieb:


    Quellcode

    1. public void tagImJahr()
    2. {
    3. int KTag = 0;
    4. int jan = 0;
    5. int feb = 28;
    6. int mar = 59;
    7. int apr = 89;
    8. int mai = 120;
    9. int jun = 150;
    10. int jul = 181;
    11. int aug = 212;
    12. int sep = 242;
    13. int okt = 273;
    14. int nov = 303;
    15. int dez = 334;
    16. if(jahr%4 == 0 && (jahr%100 != 0 || jahr%400 == 0)) feb = 29;
    17. switch (KTag)
    18. {
    19. case 1 : if(monat == 1) KTag = jan + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    20. case 2 : if(monat == 2) KTag = feb + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    21. case 3 : if(monat == 3) KTag = mar + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    22. case 4 : if(monat == 4) KTag = apr + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    23. case 5 : if(monat == 5) KTag = mai + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    24. case 6 : if(monat == 6) KTag = jun + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    25. case 7 : if(monat == 7) KTag = jul + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    26. case 8 : if(monat == 8) KTag = aug + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    27. case 9 : if(monat == 9) KTag = sep + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    28. case 10 : if(monat == 10) KTag = okt + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    29. case 11 : if(monat == 11) KTag = nov + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    30. case 12 : if(monat == 12) KTag = dez + tag; System.out.println("Der Kalendertag (" + KTag + ")");
    31. }
    32. }
    Alles anzeigen


    Du hast monat nie deklariert/initialisiert, und KTag ist immer 0. Willst du das nicht eventuell als Parameter übergeben? Außerdem musst du bedenken, dass sich in einem Schaltjahr auch alle Monate nach dem Februar um einen Tag verschieben, es reicht also nicht aus feb = 29 zu schreiben.
  • Zwei unbedeutende Lösungen von mir, die deutlich kürzer und leserlicher sind, wenngleich entweder mehr Bereichsprüfungen stattfinden oder Enums eingesetzt werden sollten.
    Rekursiv ist es, wie fast immer, kürzer.

    Quellcode

    1. public class Main {
    2. public static void main(final String... args) {
    3. System.out.println(dayOfYear(24, 11, 2013));
    4. System.out.println(dayOfYearRecursive(24, 11, 2013));
    5. }
    6. private static int dayOfYearRecursive(final int day, final int month, final int year) { //whereas index of month is zero based
    7. if(month == 0) {
    8. return day;
    9. }
    10. return daysOfMonth(month-1, year) + dayOfYearRecursive(day, month-1, year);
    11. }
    12. private static int dayOfYear(int day, int month, final int year) { //whereas index of month is zero based
    13. int result = day;
    14. while(month > 0) {
    15. result += daysOfMonth(--month, year);
    16. }
    17. return result;
    18. }
    19. private static int daysOfMonth(final int month, final int year) {
    20. if(month == 1) {
    21. return isLeapYear(year) ? 29 : 28;
    22. }
    23. if(month < 7) {
    24. return month%2 == 0 ? 31 : 30;
    25. } else if(month >= 7 && month < 12) {
    26. return month%2 == 0 ? 30 : 31;
    27. }
    28. throw new IllegalArgumentException("invalid month index: " + month);
    29. }
    30. private static boolean isLeapYear(final int year) {
    31. return year%4 == 0 || (year%100 != 0 && year%400 == 0);
    32. }
    33. }
    Alles anzeigen
  • hier die ein oder andere Version von mir...


    public void tagImJahr()
    {
    schaltjahrFuerMethode();
    int tagnr;
    if(monat < 3)
    {
    tagnr = tag + (31 * monat) -31;
    }
    else
    {
    if(schaltjahr == true)
    {
    tagnr = tag +(153*monat-162)/5 +1;
    }
    else
    {
    tagnr = tag +(153*monat-162)/5;
    }
    }
    System.out.println(tagnr);
    }

    /*
    * Aktuallisiert für die Methode tagImJahr, ob das angegebene Jahr ein
    * Schaltjahr ist.
    */
    public void schaltjahrFuerMethode()
    {
    if(jahr % 4 == 0)
    {
    if(jahr % 100 != 0)
    {
    schaltjahr = true;
    }
    else if(jahr % 400 == 0)
    {
    schaltjahr = true;
    }
    else
    {
    schaltjahr = false;
    }
    }
    else
    {
    schaltjahr = false;
    }
    }

    public void tageBerechnen()
    {
    schaltjahrFuerMethode();
    int tageProMonatOhne[] ={31,28,31,30,31,30,31,31,30,31,30,31};
    int tageProMonatMit[] ={31,29,31,30,31,30,31,31,30,31,30,31};
    int tageDesDatums=0;
    if(schaltjahr == false)
    {
    for(int i = 1; i<=monat; i++)
    {
    tageDesDatums += tageProMonatOhne[i-1];
    }
    tageDesDatums = tageDesDatums - tageProMonatOhne[monat-1];
    tageDesDatums += tag;
    System.out.println(tageDesDatums);
    }
    else
    {
    for(int i = 1; i<=monat; i++)
    {
    tageDesDatums += tageProMonatMit[i-1];
    }
    tageDesDatums = tageDesDatums - tageProMonatOhne[monat-1];
    tageDesDatums += tag;
    System.out.println(tageDesDatums);
    }
    }

    }