2014-02-23 2 views
0

나는 Ruby에서 지금까지 완성한 18 가지의 오일러 과제를 다시하고 있습니다. 불행히도 나는 초급 실수를하고 내가 뭘 잘못하고 있는지 알 수 없다. 특히 아래 코드의 문제점은 무엇입니까? 나는 4 백만 밑에 모든 피보나치 수를 더하려고 노력한다.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." 
...  

내가이야위한 루프와 그것을 해결하기 위해 관리. 하지만 분명히 내 말의 진술에 잘못된 것이있다. 나는 무엇을 모른다.

누군가 나를 도울 수 있습니까?

+1

이와 같은 일반 구문 오류가 발생하면 divide-and-conquer 방식을 사용하여 찾을 수 있습니다. 먼저'while/end' 루프를 주석 처리 할 수 ​​있습니다. 더 이상 구문 오류가 없습니다! 다음은 'while/end' 루프 안의 줄을 주석 처리합니다. 오류 없음. 결국'i ++'가 주석 처리 될 때 문법 에러가 없다는 것을 알게 될 것이다. 'i.class => Fixnum'으로'Fixnum' 문서를 확인하십시오. ': ++'메소드가 없습니다! 'Fixnum.ancestors' 클래스 중 하나에있을 수 있습니까? 'Fixnum.instance_methods.include? (: ++) => false'는 '아니오'라고 말합니다. 하지만 왜 ': ++'메소드가 없습니까? Google "Ruby i ++". 추신 :'require 'time'을 보여줘야합니다. –

답변

7

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

| 사전 또는 증분 또는 감소 연산자가 없습니다!

아니요. 객체 지향 의미를 부여 할 수 없기 때문에 아닙니다. 그들은 본질적 과제가 될 것입니다.

+0

아 흥미 롭습니다. 왜 안돼? –

+7

@ user2609980 아니기 때문에 –

+0

@ user2609980 -1 질문에. 루비가 왜'++'와'-'를 가지지 않는지 묻는다면 의미가있을 수 있지만 존재하지 않는 무언가를 사용하는 것은 단순한 부주의입니다. 그러한 것이 존재하는 문서 어디에도 쓰여지지 않습니다. 왜 루비가 가지고 있다고 생각하니? 너는 헐렁하다. 이것은 무작위로 그리스어 단어를 영어 문장에 섞어 "왜이 문장을 이해하지 못했나?"라고 묻는 것과 같습니다. – sawa

관련 문제