3

当我单击按钮“Two”时,我正在使用鞋子在 Ruby 中制作 Yahtzee 游戏,该代码假设计算值 2 在数组中出现的次数。对于出现的值 2 的每个实例,分数都会增加 2。

此代码适用于选定数量的情况,但在其他情况下,如 @array = [2,1,2,2,3] # 数组中有三个 2,因此分数假定为 6,但我的代码返回4……为什么?

button "      twos     " do     
    @array.each_with_index do |value, index|
        if (@array[index] == 2)
            @score = @score + 2
            @points = @score + 2
        end #if     
end #loop end #button
4

2 回答 2

6

这段代码看起来更好,但实际上,它做同样的事情。也许你应该检查实例变量的初始值@score@points

@array = [2,1,2,2,3]

@score = @points = 0

@score = @array.count(2) * 2
@points = @score

@score
 => 6 
@points
 => 6
于 2012-05-13T09:30:52.247 回答
0

我建议您使用Enumerable#inject方法。通过注入,您可以实现用于计数的抽象方法并在项目中的任何地方使用它:

def count_of_element array, element
  array.inject(0) { |count, e| count += 1 if e == element; count }
end

puts count_of_element [2,1,2,2,3], 2 # => 3

可能有更好的解决方案——像这样为 Array 类定义方法:

class Array
  def count_of_element element
    inject(0) { |count, e| count += 1 if e == element; count }
  end
end

puts [2,1,2,2,3].count_of_element 2 # => 3

它看起来更酷。祝你好运!

于 2012-05-13T12:31:32.297 回答