質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

7447閲覧

Ruby:ある年のある月の日数を求めるメソッド

tkfmmyst

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/10/05 08:12

ある年のある月の日数を求めるメソッドを作りたいです。
以下のコードが実行されません。。
どこが悪いのでしょうか。。。

def
get_days(year,month)
month days = [31,28,31,30,31,30,31,31,30,31,30,31]
return month_days[month - 1]
end

puts"年を入力してください"
year = gets.to_i
puts"月を入力してください"
month = gets.to_i

days = get_days(year,month)
puts"#{year}年#{month}月は#{days}日間あります"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

Ruby

1month days = [31,28,31,30,31,30,31,31,30,31,30,31]

ここですが、おそらくmonth_daysと書くのが正しいと思います。

あと、2点ほどアドバイスがあります。

  • ただ「動かない」だけでは情報が少ないので、どのような出力をしているか、そしてエラーメッセージが出ていればそれについても見てみましょう。特に、エラーメッセージは情報の宝庫です。
  • 試しに作ってみる分にはもちろん構わないですが、暦関係は標準でもライブラリがあるので、実用品を作る上では自分で書かずにライブラリを使った方が、バグを出す心配もなくなるのでおすすめです。

投稿2015/10/05 08:20

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkfmmyst

2015/10/05 08:25

ありがとうございます!今度からエラーも見てみます!助かりました!
guest

0

既にクローズしてるようで蛇足になりますが、Dateクラスを使って次のように書けば値を得ることができるようです。

ruby

1require 'date' 2a = Date.new(2015, 10, -1) # 10月の最終日 3puts a.day # 31

ただ、もしサポート機能でなければ将来のバージョンで動作しなくなる可能性があります
気になる場合はこちら

ruby

1require 'date' 2a = Date.new(2012, 3, 1) # 2012/2の最終日 3puts (a-1).day # 29

投稿2015/10/05 11:29

編集2015/10/05 11:40
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Ruby

1def get_days(m) 2 month_days = [31,28,31,30,31,30,31,31,30,31,30,31] 3 return month_days[m - 1] 4end 5 6puts"年を入力してください" 7year = gets.to_i 8puts"月を入力してください" 9month = gets.to_i 10 11days = get_days(month) 12puts "#{year}#{month}月は#{days}日間あります"

これでどうでしょう

投稿2015/10/05 08:17

編集2015/10/05 08:20
rossi46hiro

総合スコア992

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkfmmyst

2015/10/05 08:23

ありがとうございます!
guest

0

BA出た後でアレですが
閏年解決しなくていいんですか?

ruby

1def get_days(y,m) 2 month_days = [31,28,31,30,31,30,31,31,30,31,30,31] 3 rtn = month_days[m - 1] 4 if(m==2 && y%4==0 && (y%100!=0 || y%900==200 || y%900==600)) 5 rtn=29 6 end 7 return rtn 8end

ちょっとテキトーすぎたので文法だけは修正

Ruby含めpythonとかVBAみたいなカッコ使わない文法のを
普段全然書かないのでこれであってるのかも謎
閏年の条件がおかしい?のはよくわからんので放置

投稿2015/10/05 09:14

編集2015/10/05 12:04
KazuhiroHatano

総合スコア7802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2015/10/05 10:59

閏年の処理を入れるつもりで引数には年を入れたけど、閏年処理を入れる前に躓いたと言うことだと思いますので、閏年処理の回答はネタばらしかと。 と思ったけど、プログラム見ると文法も内容もおかしいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問