0

跑步score([1,1,1,1])应该会导致1100,但我得到了,但1000不知道为什么。我希望 ruby​​ist 可以看看它,让我知道出了什么问题。我有这个代码设置一个特殊的方式,因为它必须通过除此之外的其他测试。这是代码:

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
4

2 回答 2

5

在一种方法中执行的逻辑相当多。最好将该逻辑分解为几个较小的方法。这将使您的代码更容易测试 - 使用自动化单元测试,或者只是在编写代码时进行一般测试。

也就是说,问题来了:

if die == (5 || 1)

...高度怀疑那是在做你认为的那样。将其更改为:

if die == 5 || die == 1
# or
if [5, 1].include? die
于 2013-11-03T01:47:48.960 回答
2

改变

  if die == (5 || 1)

  if die == 5 || die == 1

对我有帮助。(5 || 1)总是返回5

于 2013-11-03T01:47:19.690 回答