カテゴリー
Ruby

星座判定メソッドを作ろう

この章では配列、if文、メソッドを使用して、星座判定システムを作成します。99999 9=>getsメソッドはユーザーがキーボードから入力した文字列を返します。
そして、その文字列を9で整数に変換します。前の章では自身でメソッドを作ってきましたが、getsメソッドなどはRubyであらかじめ機能が定義されているメソッドです。
つまり、このメソッドはユーザーが入力した文字列を整数値に変換するのですが、例え数字で入力したとしても、入力値は文字列として入力されるので、これを整数値に変換するのが9です。
これらの2つのメソッドを「.」で繋ぎます。
このプログラムでは2か所ユーザー入力の箇所がありますが、それらがbirthmonthとbirthdayに代入されています。99 この配列内は山羊座から順番通りに並んでいますので、決してランダムに並んでいるわけではありません。
day1には各星座の月の末日を配列に入れています。
day2には1月から12月までの末日を配列に入れています。9 =>例えばmonthに1が入り、dayに19が入っているとします。
そうすると9の部分でcountが0の時にifの条件式がtrueになりますので、入れ子のif文の条件式の判定に入ります。
このようにif文は入れ子にすることが出来ます。
つまり、初めのif文がtrueの場合に次のif文でさらに条件式を判定します。9 「day <= day1[count]」の中のdayには19が入り、1周目の9にはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnames配列の0番目の要素であるやぎ座が入ります。
例えばdayに19ではなく23が入っていると仮定すると9はfalseになるので、9の条件式の判定に入ります。
ここでday2[count]にはday2の0番目の要素である31が入っていますのでtrueになり、name には9に該当する星座が入ります。
9のcountには1周目では0が入っていますので9で余りを求めると1になります。
結果、names[1]となり、みずがめ座が入ることになります。
ではさらに、以下の箇所の詳しい説明をします。9 「count + 1」の箇所の説明をしますと例えばmonthが1で、day が23の場合には99になりfalseになるので、elsifのブロックに入りますが、1月は やぎ座とみずがめ座しかなく、やぎ座ではないのならばみずがめ座しかないのでnames配列を1つ進めるために9で1を足しています。
names.lengthを使っている理由は例えば9 の中のcountに11が入ると9の箇所が12になりますが、9の箇所が無いと仮定すると9となってしまいますが、実際に9という要素はありません。
そこで9で余りを0(12割る12で余り0)にして山羊座が出るように設計しています。
つまり、該当する以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。9 最後にreturnで返ってきたnamesの値がjuに入り、printで出力します。
結果は以下の通りです。9