运行score([1,1,1,1])
会导致1100
,但我得到1000
,并且不确定原因。我希望rubyist可以看看它,让我知道出了什么问题。我有这个代码设置一个特定的方式,因为它必须通过除此之外的其他测试。这是代码:
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
答案 0 :(得分:5)
在一种方法中,这是非常多的逻辑。最好将这种逻辑分解为几种较小的方法。这将使您的代码更容易测试 - 使用自动单元测试,或者只是在编写代码时。
那就是说,这就是问题所在:
if die == (5 || 1)
......非常怀疑这是在做你认为的事情。将其更改为:
if die == 5 || die == 1
# or
if [5, 1].include? die
答案 1 :(得分:2)
更改
if die == (5 || 1)
到
if die == 5 || die == 1
对我有帮助。 (5 || 1)
始终返回5