2012-02-19 3 views
0

このコードをThreadオブジェクト内で実行するにはどうすればよいですか?Threadクラスを使用して算術のようなメソッドを実行するにはどうすればよいですか?

私は継続的な実行を望んでいますが、私はスレッドオブジェクトを扱う知識がよくありません。私はパラメータとして数値を受け取るNumberクラスを持っています。

数字が偶数の場合は、奇数の場合は何か他のことをしてください。結局のところ、このフレームワーク内の数字の連続評価が 'number'が1になっています。配列内で保存され、1

class Number 
    attr_accessor :x 
    def initialize (number) 
    @x=[] 
    if (number % 2 == 0) 
     @x << number/2 

    elsif (number % 2 != 0) 
     @x << (number*3)+1 
    end 
    print @x.to_s.concat(" ") // unable to continue 

    end 
+0

は、あなたの入力および出力データをすることになっているものをより明確に説明することができますあれ?あなたのポストの誰もが "スレッド化はこの問題の正しい解決策です"と叫びません。 –

+0

最初に、スレッドが必要でない場合があります。私の入力は偶数/奇数の条件を通過しなければならない数値であり、これらを介して最終的に1と評価されます。これが出力になります。 22を2で割った結果が11になり、手には(数字%2!= 0)などのコードが実行されます –

+0

これはスレッドの問題ではなく、再帰の問題です。 –

答えて

0

を返すようにarray.lastを照会私は、これはあなたがやろうとしているものだと思う:

def recurse(x, a = []) 
    a << x 
    return a if x == 1 
    if x % 2 == 0 
    recurse(x/2, a) 
    else 
    recurse((x*3 + 1)/2, a) 
    end 
end 

recurse 7 
=> [7, 11, 17, 26, 13, 20, 10, 5, 8, 4, 2, 1] 

recurse 12 
=> [12, 6, 3, 5, 8, 4, 2, 1] 
+0

ありがとう、私は考えを得る。しかし、私のマシンでは、このコードはコンパイルされません。しかし、それは助けになります。 –

+0

コンパイルしないと言ったら、どういう意味ですか?私はirbでそれを走らせ、それはうまくいった。これは単なるメソッドであり、基礎となるクラスの一部ではないことに注意してください。あなたはどんなエラーを出していますか? –

+0

'#!は/ usr/binに/ ENVルビー クラスR DEF X%2 == 0 再帰(X/2、A) 場合(X = []) << X を再帰他 再帰((X * 3 + 1)/ 2、A) 端 端端 X = R.new x.recurse 20 は、おそらく、X 'は私に深いエラーのスタック・レベルを与えますなぜなら私は同じ名前のメソッド内で同じメソッドを呼び出すからです。これはエディタでも行われますが、irb-stackレベルの場合も同様です。 –

関連する問題