2017-10-26 5 views
2

特定の日付の曜日を知る必要があります。そして何とか私は間違いを犯しました。なぜなら、19歳で何年も働いているからです。しかし、2000年には私はもう正しい日を取ることができません。例えば、私が日付9.1.2001を使用している場合、私はその日を私に言いません、代わりに私が行ったスイッチのエラーが発生します。Java日付の検索日

と私はここで、カレンダー法

を使うべきではありませんが、私のコードです:

public class FindDay { 

    public static void main(String[] args) { 
     System.out.println("Type a day: "); 
     int day = In.readInt(); 
     System.out.println("Type a month: "); 
     int month = In.readInt(); 
     System.out.println("Type a year: "); 
     int year = In.readInt(); 

     if(day < 1 || day > 32) { 
      System.out.println("Type valid day"); 
     }else if (month < 1 || month >12) { 
      System.out.println("Type valid month"); 
     }else if (year < 1900) { 
      System.out.println("Type valid year"); 
     } 

     int wholeDaysYear; //to calculate how much days a year has 

     if (year % 4 == 0 && !(year % 100 == 0 && year % 400 != 0)) { 
      wholeDaysYear = 366; 
     }else { 
      wholeDaysYear = 365; 
     } 
     int monthDays = 0; //calculates days to this month 
     int february;  //if February has 28 or 2 days 
     if(wholeDaysYear ==366) { 
      february = 29; 
     }else { 
      february = 28; 
     } 
     switch(month) { 
     case 1: monthDays= 0; break; 
     case 2: monthDays =31; break; 
     case 3: monthDays= 31+february; break; 
     case 4: monthDays= 31+february+31; break; 
     case 5: monthDays= 31+february+31+30; break; 
     case 6: monthDays= 31+february+31+30+31; break; 
     case 7: monthDays= 31+february+31+30+31+30; break; 
     case 8: monthDays= 31+february+31+30+31+30+31; break; 
     case 9: monthDays= 31+february+31+30+31+30+31+31; break; 
     case 10: monthDays= 31+february+31+30+31+30+31+31+30; break; 
     case 11: monthDays= 31+february+31+30+31+30+31+31+30+31; break; 
     case 12: monthDays= 31+february+31+30+31+30+31+31+30+31+30; break; 
     default: System.out.println("Enter valid month!");break; 
     } 

     int leapYear = ((year-1)/4 - 474) - ((year-1)/100 - 18) + ((year-1)/400 - 4); //calculates the leap years 
     int allDays =(((year - leapYear)-1900)*wholeDaysYear)+monthDays+day-1; //Calculates all days 

     System.out.println(allDays); 

     int dayName = allDays % 7; 
     String dayNames = null; //gives the days their name 
     switch (dayName) { 
     case 1: dayNames = "Monday";break; 
     case 2: dayNames = "Tuesday";break; 
     case 3: dayNames = "Wendesday";break; 
     case 4: dayNames = "Thursday";break; 
     case 5: dayNames = "Friday";break; 
     case 6: dayNames = "Saturday";break; 
     case 7: dayNames = "Sunday";break; 
     default: System.out.println("Type valid Input");break; 
     } 

     System.out.println(dayNames); 
    } 
} 
+0

どのスイッチがエラーを出しましたか? –

+0

「In」とは何ですか?プログラムを実行できません。 – Alex

+1

私は1987年と今日の日付を含む5つの異なる日付を試し、正しい日を得ていません。 – notyou

答えて

1

あなたはこのような何か試すことができます:あなたが仕事を持っていない

Date yourDate; 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(yourDate); 
    int year = cal.get(Calendar.YEAR); 
    int month = cal.get(Calendar.MONTH); 
    int day = cal.get(Calendar.DAY_OF_MONTH); //or Calendar.DAY_OF_WEEK 
    // etc. 
+1

OPは、私が推測するカレンダーメソッドを使用せずにソリューションを求めました。 – procrastinator

2

をとても難しい...月、年、通年の場合は、単純に行うことができます(例):

LocalDate ld = LocalDate.of(1999, 12, 12); 
    System.out.println(ld.getDayOfWeek()); // prints SUNDAY 

LocalDateは、あなたのコードのようなJava 8以降

利用可能である、見つけるのは簡単です2つのバグがあります:彼らはから行く必要がありながら、スイッチの

  1. 例は、1〜7から行きます0から6までです。
  2. int dayName = allDays % 7;ここでは、年の最初の日が月曜日(あなたのケーススイッチによる)であると仮定しますが、これは必ずしも真実ではありません。
+2

私は彼がAPIを使用することができないので、OPはあなたの答えを取るとは思わない。 – Alex

+3

OPが尋ねた回答ではないかもしれませんが、それは確かにプロダクションコードで使用するための推奨回答です。 –

+1

質問はおそらく日課の取り扱いやプロダクションコーディングについてではなく、宿題割り当ての構文とアルゴリズムに関するものです。 –