BohYoh.comトップページへ

新・明解Javaで学ぶアルゴリズムとデータ構造

戻る  

演習2-9の解答

 y 年m 月d 日の年内の残り日数(12月31日であれば0、12月30日であれば1)を求める以下のメソッドを作成せよ。
  static int leftDayOfYear (int y , int m , int d )

// 演習2-9 // 年内の残り日数を求める import java.util.Scanner; class LeftDayOfYear {    //--- 各月の日数 ---//    static int[][] mdays = {       {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},   // 平年       {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},   // 閏年    };    //--- 西暦year年は閏年か(閏年:1/平年:0) ---//    static int isLeap(int year) {       return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0;    }    //--- 西暦y年m月d日の年内の残り日数を求める ---//    static int leftDayOfYear(int y, int m, int d) {       int   days = d;                  // 日数       for (int i = 1; i < m; i++)            // 1月~(m-1)月の日数を加える          days += mdays[isLeap(y)][i - 1];       return 365 + isLeap(y) - days;    }    public static void main(String[] args) {       Scanner stdIn = new Scanner(System.in);       int retry;               // もう一度?           System.out.println("年内の残り日数を求めます。");       do {          System.out.print("年:");  int year  = stdIn.nextInt();   // 年          System.out.print("月:");  int month = stdIn.nextInt();   // 月          System.out.print("日:");  int day   = stdIn.nextInt();   // 日          System.out.printf("年内の残りは%d日です。\n", leftDayOfYear(year, month, day));          System.out.print("もう一度しますか(1…はい/0…いいえ):");          retry = stdIn.nextInt();       } while (retry == 1);    } }


戻る