我的while循环有什么问题?

时间:2014-02-23 14:43:56

标签: ruby

我正在重做迄今为止我在Ruby中完成的18个欧拉挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法弄清楚我做错了什么。具体来说,下面的代码有什么问题?我尝试将所有斐波纳契数字添加到400万以下。

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."

我得到的输出是

2.rb:22: syntax error, unexpected keyword_end
2.rb:27: syntax error, unexpected $end, expecting keyword_end
...ime.now) * 1000} milliseconds."
...    

之前我遇到过此错误,并设法使用for循环修复它。但显然我的最终陈述有问题。我不知道是什么。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:7)

ruby中不允许

i++。写i += 1

  

Ruby has no pre/post increment/decrement operator。例如,x ++或x--将无法解析。更重要的是,++ x或--x什么都不做!实际上,它们表现为多个一元前缀运算符:-x == --- x == ----- x == ......要递增数字,只需写入x + = 1。

[ruby-talk:18951] Re: notes from a Ruby newbie - blade

  

|没有后期或预增量或减量运算符!

     

否。因为我不能给它们面向对象的语义。它们基本上是作业。