2014-01-16 25 views
0

以下是應用程序的代碼。確切的錯誤信息是Ruby腳本中未定義的'div'錯誤,使用DateTime計算最佳喚醒時間

NoMethodError: undefined method 'div' for "50":String from (irb):5:in `new' 

該應用程序試圖做的是返回90分鐘4個不同的時間,並顯示結果時間。

require 'time' 

puts "What time do you have to wake up? Please use the format H:MM" 
wake_time_unformatted = gets.chomp.split(":") 
wake_time= DateTime.new(1,1,1,wake_time_unformatted[0],wake_time_unformatted[1]) 

n=0, m=3 
sleep_times = Array.new(4) 
while n <= 3 
    while m <= 6 
     time = wake_time - Rational(m*54000/86400) 
     sleep_times[n] = time 
     m = m + 1 
    end 
    n = n + 1 
end 

puts sleep_times 
+0

也許先將它轉換爲數字。 –

回答

1

如下活動:

wake_time= DateTime.new(1,1,1,wake_time_unformatted[0].to_i,wake_time_unformatted[1].to_i) 

wake_time_unformatted[0]必須是wake_time_unformatted[0].to_iwake_time_unformatted[1]必須是wake_time_unformatted[1].to_i

或更改wake_time_unformatted = gets.chomp.split(":")wake_time_unformatted = gets.chomp.split(":").map(&:to_i)。然後DateTime.new(1,1,1,wake_time_unformatted[0],wake_time_unformatted[1])將工作。

第二次更改:n=0, m=3應該是n=0 ; m=3

1

讓我看看我能否解釋發生了什麼。你試圖在字符串參數傳遞給DateTime.new()時,它期望整數,這就是在這種情況下導致錯誤的原因。這就是爲什麼Arup Rakshit建議嘗試gets.chomp.split(":").map(&:to_i)的原因 - 您將數組中的字符串映射爲整數。

查看Ruby文檔並查看new()方法將接受什麼類型的參數總是有幫助的。

聲明n = 0, m =3時有第二個錯誤。這實際上並不是將兩個不同的值分配給兩個不同的變量,而是將其分配給一個數組中的值。這就是爲什麼將它重寫爲n=0 ; m=3的原因 - 你用分號分隔語句。

祝您好運與您的腳本。

+0

感謝幫助,謝謝!你能不能幫我弄清楚爲什麼輸出不是一個有4個不同整數時間的數組?現在它只是一個沒有意義的日期。 – megashigger

+1

它實際上是一個數組!嘗試將'puts sleep_times'改爲'print sleep_times',你會看到結果是一個有四個值的數組:其中一個是日期,其餘的都是'nil'。發生這種情況是因爲你的內循環只運行一次並且只分配給第一個位置。 – hlh