引数として生年月日を渡したらそれを元に年齢を計算するプログラムを作りたいです。
日付文字列として処理できる文字列が渡されたら終了ステータスを0、
日付文字列として処理できない文字列が渡された場合は終了ステータスを1にしてエラーメッセージを表示させ終了させます。
一先ずサイトを参考にしてコードを書いたのですが、入力ができないまま
「[西暦年] [月] [日]」と実行されてしまいます。
改善点を教えていただければ幸いです。
Java
1import java.util.Calendar; 2 3public class CalcAge { 4 public static void main( String[] args ) { 5 // 変数の宣言 6 int year_birth; // 誕生日の西暦年 7 int month_birth;// 誕生日の月 8 int day_birth; // 誕生日の日 9 10 // 入力した引数が3つ以上かを調べる 11 if ( 3 >args.length ) { 12 // 入力した引数が3つ未満の場合、使用方法を表示する 13 System.out.println( "[西暦年] [月] [日]" ); 14 return; 15 } 16 17 // 引数をint型に変換し、年/月/日に代入 18 try { 19 // args[0],args[1],args[2]を数値に変換 20 year_birth = Integer.parseInt( args[ 0 ] ); 21 month_birth = Integer.parseInt( args[ 1 ] ); 22 day_birth = Integer.parseInt( args[ 2 ] ); 23 } 24 catch( NumberFormatException ne ) 25 { 26 // args[0],args[1],args[2]のどれかが数字ではない 27 System.out.println( "生年月日の取得に失敗しました" ); 28 return; 29 } 30 31 // 誕生日の数値チェック 32 if ( 0 > year_birth ) { 33 System.out.println( "西暦年に0以上を指定してください" ); 34 return; 35 } 36 if ( ( 1 > month_birth ) || ( 12 < month_birth ) ) { 37 System.out.println( "月に1~12を指定してください" ); 38 return; 39 } 40 if ( ( 1 > day_birth ) || ( 31 < day_birth ) ) { 41 System.out.println( "日に1~31を指定してください" ); 42 return; 43 } 44 45 // 変数の宣言 46 int year_today; // 現在の西暦年 47 int month_today; // 現在の月 48 int day_today; // 現在の日 49 50 // 今日の生年月日を変数に代入 51 Calendar calendar = Calendar.getInstance(); 52 year_today = calendar.get( Calendar.YEAR ); 53 month_today = calendar.get( Calendar.MONTH ) + 1; 54 day_today = calendar.get( Calendar.DAY_OF_MONTH ); 55 56 // 変数の宣言 57 int age; // 計算する年齢 58 59 // 年齢の計算 60 // 西暦年の差をageに代入 61 age = year_today - year_birth; 62 // まだ誕生月になっていなければ 63 if ( month_today < month_birth ) 64 -- age; // 1年引く 65 else { 66 // まだ誕生月日になっていなければ 67 if ( month_today == month_birth ) { 68 if ( day_birth < day_today ) 69 -- age; // 1年引く 70 } 71 } 72 73 // 計算結果を表示 74 System.out.println( age + "歳です" ); 75 } 76}