我正在使用Shoes在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
答案 0 :(得分:6)
这段代码看起来更好,但事实上,它做了同样的事情。也许您应该检查实例变量@score
和@points
的初始值?
@array = [2,1,2,2,3]
@score = @points = 0
@score = @array.count(2) * 2
@points = @score
@score
=> 6
@points
=> 6
答案 1 :(得分: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
看起来更酷。祝你好运!