2016-07-06 13 views
2

私は日付フォーマッタを使うことができますが、私は学びたいと思っています。スキャナから入力して有効な日付を入力する

Scannerの日付をmm/dd/yyyyの形式で取得しようとしています。私はその月のインプットを取るときに苦労している。たとえば、私が1月を希望する場合は、01を押しての代わりににmonthIntを変換します。

また、私の日にも問題があります。私は有効な日付を入力すると、無効な日が続いています。私のifステートメントが乱れていますか?それ以上の説明が必要な場合は、尋ねてください。あなたの時間をありがとう!

マイコード:

System.out.println("Enter a date in the format mm/dd/yyyy"); 
    String mm; 
    String dd; 
    String yyyy; 
    String January = null; 
    String February = null; 
    String March = null; 
    String April = null; 
    String May = null; 
    String June = null; 
    String July = null; 
    String August = null; 
    String September = null; 
    String October = null; 
    String November = null; 
    String December = null; 
    String month = null; 
    String date = null; 

    Scanner keyboard = new Scanner(System.in); 

    date = keyboard.next(); 
    if (date.length() != 10) { 
     System.out.println("Format of date is wrong"); 
    } 
    if (date.charAt(2) != '/') { 
     System.out.println("Must have/after mm"); 
    } 
    if (date.charAt(5) != '/') { 
     System.out.println("Must have/after dd"); 
    } 

    else if (date.length() == 10 && date.charAt(2) != '/' && date.charAt(5) != '/') { 
     System.out.println(date + " date is valid"); 
    } 

    mm = date.substring(0, 1); 
    int monthInt = Integer.parseInt(mm);   

    if (monthInt == 1) { 
     month = January; 
    } else if (monthInt == 2) { 
     month = February; 
    } else if (monthInt == 3) { 
     month = March; 
    } else if (monthInt == 4) { 
     month = April; 
    } else if (monthInt == 5) { 
     month = May; 
    } else if (monthInt == 6) { 
     month = June; 
    } else if (monthInt == 7) { 
     month = July; 
    } else if (monthInt == 8) { 
     month = August; 
    } else if (monthInt == 9) { 
     month = September; 
    } else if (monthInt == 10) { 
     month = October; 
    } else if (monthInt == 11) { 
     month = November; 
    } else if (monthInt == 12) { 
     month = December; 
    } else { 
     System.out.println("Invalid Month"); 
    } 

    if (monthInt < 0 || monthInt > 12) { 
     System.out.println("Invalid month"); 
    } 

    dd = date.substring(3, 4); 
    int dayInt = Integer.parseInt(dd); 

    if (monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 
      || monthInt == 12 && dayInt < 0 && dayInt > 31) { 
     System.out.println("Invalid day"); 
    } 

    if (monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11 
      && dayInt < 0 && dayInt > 30) { 
     System.out.println("Invalid day"); 

    } 
    if (monthInt == 2 && dayInt < 0 && dayInt > 28){ 
     System.out.println("Invalid day"); 
    } 
+0

どの日のために数ヶ月を必要とするuがエラーを取得していますか? – DarkV1

+0

'String monthName = null'のものをすべて削除します。それは混乱している必要はありません。代わりに 'month = monthName'コードを引用符で囲み、それを実際の文字列(例えば' month = "January" ')にします。 – Confiqure

答えて

3

あなたの無効な日をチェック上の文が正しくない場合。 0の日INTも無効であるため、dayInt < 0文がdayInt <=0に変更した

if ((monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 || monthInt == 12) && (dayInt <= 0 || dayInt > 31)) { 
    System.out.println("Invalid day"); 
} 

if ((monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11) && (dayInt <= 0 || dayInt > 30)) { 
    System.out.println("Invalid day"); 
} 

if (monthInt == 2 && (dayInt <= 0 || dayInt > 28)) { 
    System.out.println("Invalid day"); 
} 

注:それは次のようになります。

ここで重要な点は、指定された月の1つで、その月の日の範囲外である場合は無効な日にしたいということです。したがって、if(month1 OR month2 etc) AND (outsiderange1 OR outsiderange2)という形式の化合物を使用します。

+0

@ DarkV1私はC#を考えていませんでした。編集されました。 – nhouser9

+0

これは2番目の問題を修正するはずです。 +1 – DarkV1

+1

ちょうど、これは2月の閏年をチェックしません。 –

0

問題はここにあるように見える:

mm = date.substring(0, 1);

あなたは1月のための「01」を入力すると、それがかかりますので、それは、日付文字列から最初の文字を取る「0」、monthIntがするので、 0にすると、「月が無効です」というエラーが表示されます。あなたは2つの文字を取得したい場合は、あなたがmm = date.substring(0, 2);

を必要とする同じ問題が日付で存在する、あなたはdd = date.substring(3, 5);

関連する問題