Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未定义';分区';使用DateTime计算最佳唤醒时间的Ruby脚本出错_Ruby_Datetime - Fatal编程技术网

未定义';分区';使用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
。这是因为您的内部循环只运行一次,并且只分配给第一个位置。