26.1.6.7 配列の使用

通算日のプログラムを配列を使って書いてみましょう.

class YearDay2 {
 public static void main(String argv[ ]) {
     int c[ ]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     int n=210;
     int m, p;
     m=1; p=0;
     while(n > p+c[m]){
         p=p+c[m];
         m=m+1;
     }
     System.out.println(n + "=" + m + "月" + (n-p) + "日");
 }
}

fileYearDay2.java (utf-8)

目的とする日数(n)を越す直前まで月(m)と累積日(p)とを増やす格好になっています.最初のifを12個並べたものとは格段にスマートでわかりやすいものになりました.なおここでは,配列cのサイズは(12ではなく)13としてあります.k月の日数をc[k]で表わしたいからです.c[12]が使えるためには,サイズ13(以上)である必要があります.c[0]は使用しないことになります.結果を示します.

210=7月29日

このプログラムは一応動くのですが,nの初期値(ここでは210)によっては異常終了してしまうことがあります.なぜでしょうか.