26.1.6.8 配列と反復

配列データを処理するほとんどの場合は繰返しの形式を使います.データ自身が「繰返し」構造をしているからです.したがって,繰返し形式の場合の注意点がこの場合にも適要されます.それは,繰返しが終了することの確認です.

このプログラムでの繰返しは

while(n > p+c[m]){
   p=p+c[m];
   m=m+1;
}

という部分です.whileの条件の中では,nは初期値のまま,pとmは変化(増加)してゆきます.したがってこの繰返しが正常な範囲である1 <=m <=12で終了するためには,1 <= n <= 365である必要があります.

試しにn=1000としてこのプログラムを実行させてみると,m=12でも繰返しが終了せず,mは13になり

存在しない要素c[13]を指定してエラーになる

ことになります. これを防ぐためにはwhileの条件を

m < c.length && n > p+c[m]

と変更します. さらに,m=13になったということは「変なデータ」だったわけですから,その旨の表示も必要です. 一般に配列aの上限チェックはi &< a.lengthであり,<= ではないことに注意しましょう.