未定义';分区';使用DateTime计算最佳唤醒时间的Ruby脚本出错
以下是应用程序的代码。确切的错误消息是未定义';分区';使用DateTime计算最佳唤醒时间的Ruby脚本出错,ruby,datetime,Ruby,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("
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
需要“时间”
输入“你必须在什么时候醒来?请使用H:MM格式”
wake\u time\u unformatted=gets.chomp.split(“:”)
wake\u time=DateTime.new(1,1,1,wake\u time\u未格式化[0],wake\u time\u未格式化[1])
n=0,m=3
sleep_times=Array.new(4)
当n时,按以下步骤操作:
wake_time= DateTime.new(1,1,1,wake_time_unformatted[0].to_i,wake_time_unformatted[1].to_i)
唤醒时间未格式化[0]
必须是唤醒时间未格式化[0]。to i
和唤醒时间未格式化[1]
必须是唤醒时间未格式化[1]。to i
或者将wake\u time\u unformatted=gets.chomp.split(“:”)
更改为wake\u time\u unformatted=gets.chomp.split(“:”).map(&:to_i)
。然后DateTime.new(1,1,1,唤醒时间未格式化[0],唤醒时间未格式化[1])
将起作用
第二个变化:n=0,m=3
应该是n=0;m=3
让我看看能不能解释一下发生了什么。当DateTime.new()需要整数时,您试图将字符串参数传递给它,这就是造成本例错误的原因。这就是为什么Arup Rakshit建议尝试gets.chomp.split(“:”).map(&:to_i)
会奏效的原因-您正在将数组中的字符串映射到整数
查看Ruby文档并了解new()方法将接受何种类型的参数总是很有帮助的
在声明n=0,m=3
时出现第二个错误。这实际上并不是给两个不同的变量分配两个不同的值,而是在数组中分配值。这就是为什么将其重写为n=0;m=3
有效-您正在用分号分隔语句
祝您的脚本好运。也许可以先将其转换为数字。感谢您的帮助,谢谢!你能帮我弄清楚为什么输出不是一个有4个不同整数倍的数组吗?现在它只是一个没有意义的单一日期。它实际上是一个数组!尝试将将sleep\u times
更改为print sleep\u times
,您将看到结果是一个包含四个值的数组:一个是日期,其余的是nil
。这是因为您的内部循环只运行一次,并且只分配给第一个位置。