Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

有効な日にちを入れても有効でないという設定のメッセージが出ます。

こんにちは。

下記のプログラミングで20世紀の日にちを入力すれば”その日付は有効である”というメッセージが出るはずが”その日付は無効である”というメッセージが選択されます。どうしてでしょうか?



import java.util.Scanner;

public class Dates
{
    public static void main(String[] args)
    {
    int month, day, year;   //date read in from user
    int daysInMonth = 0;        //number of days in month read in 
    boolean monthValid, yearValid, dayValid;  //true if input from user is valid
        

       
     boolean leapYear = false;       //true if user's year is a leap year
         Scanner scan = new Scanner(System.in);

    //Get integer month, day, and year from user
         System.out.println("Enter any valid month in the second millenium:  ");
         month= scan.nextInt();
         System.out.println("Enter any valid day in the second millenium:  "); 
         day= scan.nextInt();
         System.out.println("Enter any valid year in the second millenium:    "); 
         year= scan.nextInt();
      
        //Check to see if month is valid
      
      
         if(month>=1&&month<=12)
            monthValid=true;
         else
            monthValid=false;       
         if(year>=1000&&year<=1999)//Check to see if year is valid
            yearValid=true;
         else
            yearValid=false;
         if(yearValid)
             if(year%4==0&&year%100!=0||year%4==0&&year%100==0&&year%400==0)
                leapYear=true;//Determine whether it's a leap year
             else
                 leapYear=false;
    //Determine number of days in month
         if(monthValid&&yearValid)
          {   if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
            {  if(day>=1&&day<=31)
                  day=daysInMonth;
               else
                  daysInMonth=0;
            }  
              else
                {  if(month==4||month==6||month==9||month==11)
                    {   if(day>=1&&day<=30)
                           day=daysInMonth;
                        else
                           daysInMonth=0;
                     }   
                   else 
                       { if(month==2)
                            if(!leapYear)
                                if(day>=1&&day<=28)
                                   day=daysInMonth;
                                else
                                    daysInMonth=0;
                            else
                                 if(leapYear&&day>=1&&day<=29)
                                      day=daysInMonth;
                                 else
                                     daysInMonth=0;
                        }    
                }
           }
          else
                   daysInMonth=0;
          if(daysInMonth!=0)//User number of days in month to check to see if day is valid
                   dayValid=true;
          else
                   dayValid=false;
          if(dayValid) //Determine whether date is valid and print appropriate message    
              {   if(!leapYear)
                      {System.out.println("Date is valid.");
                        System.out.println("The year is not a leap year.");
                      }
                  else
                       {System.out.println("Date is valid.");
                        System.out.println("The year is a leap year.");
                       }
              }    
          else
               if(!dayValid)
                     System.out.println("Date is not valid.");
     

    }    
}

2

回答

4758

閲覧

2件の回答

評価

0

>どうしてでしょうか?
せめてどこでその判定が出されるかくらい、自分で見つけようよ。

ところでmilleniumじゃなくてmillenniumじゃないの。

評価

0

う〜ん…
一言で言うとコードが汚い!(><)
GregorianCalendarを使うと
もっと綺麗に書ける。
入力をどういったフォーマットで受け付けるかは
このコードだけではわかりかねますが
入力された日付をまずは分割して上記クラスの
コンストラクタに渡す。
日付だけなら下記のコンストラクタでOK!
GregorianCalendar(int year,int month,int date)
setLenientを設定する。
んでgetTimeInMillis()を呼ぶ。
不正な日付の場合は例外がスローされる。
これを使用すれば入力された日付が
不正でないかを少ないコード量で判定できる。
ちなみにうるう年も勝手に判定してくれるので
便利。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。