2016-04-19 13 views
0

ここには練習問題があります - 何分もかかるメソッドを記述し、数字をhours:minutesにフォーマットする文字列を返します。なぜこのルビーコードが動作しないのですか

def time_conversion(minutes) 
    hours = minutes/60 
    mins = minutes % 60 
    time = hours + ":" + mins 
    return time 
end 

以下は、これが機能するかどうかを確認するためのテストです。それらがtrueを返す場合、それは私のコードが正しく動作することを意味します。

puts('time_conversion(15) == "0:15": ' + (time_conversion(15) == '0:15').to_s) 
puts('time_conversion(150) == "2:30": ' + (time_conversion(150) == '2:30').to_s) 
puts('time_conversion(360) == "6:00": ' + (time_conversion(360) == '6:00').to_s) 

は、時々私は、最初の2つのテストのための真の取得が、第3のテストラインは、コードが必要な正確にプリントアウトされますにもかかわらず、偽示します。私は次のエラーを取得する

他の回:

文字列がFixnumか(REPL)に強制することはできません:4:+' (repl):4:in time_conversionで

':1(REPL)を初期化 `における' 支援してください。

+1

文字列に数値を追加することはできません。 'irb'を実行して' 5 + 'foo''と入力すると、同じエラーが発生します。あなたの 'time_conversion'関数で' time = hours.to_s + ':' + mins.to_s'を試してください。あるいは関数の内容全体を 'return"#{minutes/60}:#{minutes%60} "と置き換えるだけでも" – lurker

+0

wow。そのトリックをした。私はハッシュを使用して来ていないが、それは面白いです。私は分と時間変数を削除することができると思います – hac13

+0

はい、あなたはそれらの変数を削除することができます。 '6:05'のように、分で先頭に0を入れたい場合は、" ruby​​ string formatting "を調べるべきです。あなたの 'time_conversion'は' 6:00'を作成しません。 '6:0'を作成します。 – lurker

答えて

0

Fixnum#+は、Stringではなく、Numeralという引数をとります。

+1

ここに私の最初の質問と私は超高速応答を得た。ありがとうございました! – hac13

1

エラーは、主に対し、 time = hours + ":" + mins

hours & minsFixnumあり、この行を参照「:」エラーメッセージが示すように、「文字列Fixnumかに強制することはできません」String あります。

time = hours.to_s + ":" + minutes.to_sまたはtime = "#{hours}:#{minutes}"のいずれかを指定できます。

+0

ええ、lurkerは私に同じことを指摘した。私はそこに最後の提案が好きです。それはいいと簡潔です ありがとう! – hac13

+0

アップしてくれてありがとう、実際には私の最初のans stackoverflow! – linY

+0

それは素晴らしいです。私が立ち上がって自分を走っているときに相手に会いましょう – hac13