我正在重新完成迄今爲止在Ruby中完成的18個Euler挑戰,我喜歡它。不幸的是,我犯了一些初學者的錯誤,無法弄清楚我做錯了什麼。具體來說,下面的代碼有什麼問題?我嘗試添加400萬以下的所有斐波納契數字。我的while循環有什麼問題?
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循環解決它。但是,我的結尾語句顯然有些問題。我不知道。
有人可以幫我嗎?
當你有這樣的一般語法錯誤時,你可以使用分而治之的方法來找到它。首先你可能註釋掉'while/end'循環。沒有更多的語法錯誤!接下來註釋掉'while/end'循環中的行。沒有錯誤。最終,當'i ++'被註釋掉時,你會發現沒有語法錯誤。作爲'i.class => Fixnum',檢查'Fixnum'文檔。沒有':++'方法!它可以在'Fixnum.ancestors'中的其中一個類中嗎? 'Fixnum.instance_methods.include?(:++)=> false'說'不'。但爲什麼沒有':++'方法? Google「Ruby i ++」。 PS你應該顯示'require'time''。 –