Avatar billede mhl2k01 Nybegynder
22. september 2005 - 11:59 Der er 2 kommentarer og
1 løsning

Tæl antal dage ud fra en speciel dato, skudår!

Hej Eksperter,

Jeg har et problem med en kalender jeg har lavet i Java, dog skal jeg nu lave en Klasse med en funktion i som fortælle mig hvilken ugedag vi har, og i denne funktion skal der medregnes dage fra skudår..

Nogle gode ideer? Og har java eventuelt en indbygget funktion til at tælle dage??
Avatar billede arne_v Ekspert
22. september 2005 - 14:56 #1
java har indbygget funktionalitet til at finde ugedag, men jeg antager at det skal
kodes selv

til inspiration fra lageret:

import java.util.*;

public class WeekDay {
  private static final String[] dayname = {
          "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday" };
  // The java way
  public static String wd1(int y, int m, int d) {
      Calendar c = new GregorianCalendar();
      c.set(Calendar.YEAR, y);
      c.set(Calendar.MONTH, m-1);
      c.set(Calendar.DAY_OF_MONTH, d);
      return dayname[c.get(Calendar.DAY_OF_WEEK) - 1];
  }
  // The elegant way
  public static String wd2(int y, int m, int d) {
      int a = (14 - m) / 12;
      int yx = y - a;
      int mx = m + 12*a - 2;
      int daynum = (d + yx + yx/4 - yx/100 + yx/400 +31*mx/12) % 7;
      return dayname[daynum];
  }
  // The straigth forward way
  private static boolean isLeapYear(int y) {
      return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
  }
  private static final int[][] month = { {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
                                          {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} };
  public static String wd3(int y, int m, int d) {
      int daynum = 0;
      daynum += ((y-1) * 365 + (y-1)/4 - (y-1)/100 + (y-1)/400); // years
      daynum += month[isLeapYear(y)?1:0][m-1]; // months
      daynum += (d - 1); // days
      daynum = (daynum + 1) % 7; // first day of week = monday
      return dayname[daynum];
  }
  private static void test(int y, int m, int d) {
      System.out.println(wd1(y, m, d) + " " + wd2(y, m, d) + " " + wd3(y, m, d));
  }
  public static void main(String[] args) {
      test(2003, 12, 4);
      test(2003, 12, 24);
      test(2004, 12, 8);
      test(2000, 12, 31);
      test(1900, 1, 1);
      for(int y = 1800; y <= 2100; y++) {
        for(int m = 1; m <= 12; m++ ) {
            for(int d = 1; d <= 28; d++) {
              if(wd1(y, m, d) != wd2(y, m, d)) {
                  System.out.println("problem wd2 : " + d + "-" + m + "-" + y);
              }
              if(wd1(y, m, d) != wd3(y, m, d)) {
                  System.out.println("problem wd3 : " + d + "-" + m + "-" + y);
              }
            }
        }
      }
  }
}
Avatar billede arne_v Ekspert
04. november 2005 - 20:16 #2
OK ?
Avatar billede mhl2k01 Nybegynder
29. november 2005 - 10:31 #3
Lækkeri!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester