3

ボタン「2」をクリックすると、靴を使用してRubyでYahtzeeゲームを作成しています。コードは、配列で値2が発生する回数をカウントすると想定されています。表示される値 2 のインスタンスごとに、スコアは 2 ずつ増加します。

このコードは選択された数のケースで機能しますが、@array = [2,1,2,2,3] # 配列に 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メソッドを使用することをお勧めします。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 に答える