Ruby 我的while循环有什么问题?
我正在重做我用Ruby完成的18项Euler挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法找出我做错了什么。具体来说,下面的代码有什么问题?我试着把所有小于400万的斐波那契数相加Ruby 我的while循环有什么问题?,ruby,Ruby,我正在重做我用Ruby完成的18项Euler挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法找出我做错了什么。具体来说,下面的代码有什么问题?我试着把所有小于400万的斐波那契数相加 start = Time.now def sum_fibonacci_till_4_million previous_previous_value = 1 previous_value = 2 i = 2 fibo = Array.new while previou
start = Time.now
def sum_fibonacci_till_4_million
previous_previous_value = 1
previous_value = 2
i = 2
fibo = Array.new
while previous_value < 4000000 do
fibo.push(previous_previous_value)
fibo.push(previous_value)
temp = previous_value
previous_value = previous_value + previous_previous_value
previous_previous_value = temp
i++
end
return fibo.inject(:+)
end
puts "The answer is #{sum_fibonacci_till_4_million()} and it took #{(start - Time.now)
* 1000} milliseconds."
我以前有过这个错误,我设法用for循环修复了它。但很明显,我的最终陈述有问题。我不知道是什么
有人能帮我吗?
i++
在ruby中是不允许的。写入i+=1
。例如,x++或x--将无法解析。更重要的是,++x或--x什么也做不了!事实上,它们的行为就像多个一元前缀运算符:-x==--x==--x==。。。。。。要增加一个数字,只需写x+=1
|没有后期或预增量或减量运算符
没有。因为我不能给他们面向对象的语义。它们基本上是任务。
啊,有趣。为什么不呢?@user2609980因为它没有。@user2609980-1回答这个问题。如果您只是问为什么Ruby没有
++
和--
,那么这可能是有意义的,但是使用不存在的东西只是粗心大意。文件中没有任何地方写有这样的东西。你为什么认为Ruby有它?你太马虎了。这就像是在英语句子中随机混合一些希腊单词,然后问“为什么这个句子不被理解?”@sawa-Wow,这太刺耳了。有了这种态度,你可以用“RTFM!”来回避大多数问题。我同意我的态度是支持RTFM的。在这种典型的情况下,OP是懒惰的,我也讨厌它。但在这种情况下,它甚至超越了这一点。OP询问的是手册中不存在的东西:OP在Ruby上下文中已经在脑海中决定的东西。当您遇到这样的一般语法错误时,您可以使用分而治之的方法来查找它。首先,您可以注释掉while/end
循环。没有更多的语法错误!接下来注释掉while/end
循环中的行。没有错误。最后,当注释掉i++
时,您会发现没有语法错误。作为i.class=>Fixnum
,检查Fixnum
文档。没有:++
方法!它可能在Fixnum.forests
中的一个类中吗Fixnum.instance_方法。包括?(:++)=>false
表示“否”。但是为什么没有:++
方法呢?谷歌“Ruby i++”。PS您应该显示需要“时间”
。
2.rb:22: syntax error, unexpected keyword_end
2.rb:27: syntax error, unexpected $end, expecting keyword_end
...ime.now) * 1000} milliseconds."
...