-1

学校の「ウォームアップ テスト」として、逆ポーランド記法計算機を作成しています。私はほとんどそれを釘付けにしました。私が遭遇している問題は、これを自分で実行すると、返された整数だけが表示されることです(これは望ましいことです)。これを学校の RSpec チェッカーにプラグインすると、データが配列で返されるため、正しくないというフラグが立てられます。

修正するために、最後に queue.each ステートメントを作成しました。いくつかの異なる位置でこれを試しましたが、問題ではないようです。評価が回答を返すときに、配列形式から回答を抽出するためのより大きな概念はありますか?

class RPNCalculator

    def evaluate(string)
        holding = []
        queue = []
        string = string.split(" ").to_a      #jam string into an array - break on spaces

        string.each do |x|
            if x.match(/\d/)      #number checker. if true throw it in queue.
             queue << x.to_i       #convert to number from string
            elsif x.match(/\+/)      #math operator checker
                holding << queue[-2] + queue[-1]     #grab queue's last 2 & replace w/ result
                queue.pop(2)
                queue << holding[-1]
            elsif x.match(/\-/)
                holding << queue[-2] - queue[-1]
                queue.pop(2)
                queue << holding[-1]    
            elsif x.match(/\*/) 
                holding << queue[-2] * queue[-1]
                queue.pop(2)
                queue << holding[-1]    
            else
            end
        end
            return queue.each { |x| puts x.to_i}     # by [-1] in string, queue holds answer
    end
end

お時間をいただきありがとうございます。

4

1 に答える 1

0

メソッド ( なしqueue.each) は の結果を返していstring.eachます。

戻りたい場合は、そうqueueする必要があります。

class RPNCalculator

    def evaluate(string)
        holding = []
        queue = []
        string = string.split(" ").to_a      #jam string into an array - break on spaces

        string.each do |x|
          #...
        end
        queue[0] # return the final result, stored in queue
    end
end
于 2014-08-19T02:52:18.240 に答える