2013-11-03 56 views
0

運行score([1,1,1,1])應導致1100,但我得到1000,我不知道爲什麼。我希望一個紅寶石可以看看它,讓我知道出了什麼問題。我有這樣的代碼,因爲它必須通過除此之外的其他測試。下面的代碼:破碎的迭代器代碼

def score(dice) 
    score = 0 
    done_nos = [] 
    dice.each do |die| 
    unless done_nos.include?(die) 
     if dice.to_s.scan(/#{die}/).length >= 3 
      score += 
      if die == 1 
       1000 
      else 
       (100 * die.to_i) 
      end 
      if die == (5 || 1) 
      score += ((dice.to_s.scan(/#{die}/).length - 3) * 
       if die == 5 
        50 
       else 
        100 
       end 
      ) 
      end 
     elsif die == 1 
      score += (dice.to_s.scan(/#{die}/).length * 100) 
     elsif die == 5 
      score += (dice.to_s.scan(/#{die}/).length * 50) 
     end 
    done_nos << die 
    end 
    end 
score 
end 

回答

5

這是一個單一的方法進行了很多邏輯。最好把這個邏輯分成幾個更小的方法。這會讓你的代碼更容易測試 - 使用自動化的單元測試,或者只是在編寫代碼的時候。

這就是說,這裏的問題:

if die == (5 || 1) 

...高度懷疑,在做什麼,你認爲它是。將其更改爲:

if die == 5 || die == 1 
# or 
if [5, 1].include? die 
2

變化

if die == (5 || 1) 

if die == 5 || die == 1 

幫助我。 (5 || 1)總是返回5

+1

在ruby中,|| ||計算爲第一個真值或false。 「(5 || 1)」實際上評估爲「5」,而不是「真」。 – tybro0103

+0

謝謝,不知道=) – zishe