2017-03-26 9 views
1

私は複数の入力を取得し、異なる変数(irb内)に割り当てようとしていますが、動作させることができません。私は最初の変数に対してのみ行うことができますが、次の3つについては、最後の入力は他の2に割り当てられます(私は4つすべてを持っています)Ruby:複数の入力のプロンプト

私がしようとしていることは、最初の入力(例えば、2)、それは3つの入力を2回促します。

t = gets.to_i 

これは最初の入力であり、正しく割り当てられます。 これで3つの入力が求められますが、最後の入力のみが保存され、3つの変数すべてに割り当てられます。

a = gets.to_i 
b = gets.to_i 
k = gets.to_i 

3つの入力を受け入れますが、最後のものだけが保存されますか?私が入力した場合

は、B (私は2を入力します)最初のプロンプトの後

1 
10 
3 

(最初の反復のために)言って、kは値3

t = gets.to_i 
a = b = k = [] 

for i in 0..t-1 do 
    a[i] = gets.to_i 
    b[i] = gets.to_i 
    k[i] = gets.to_i 
end 

がそれですましたそれはループに入っているからですか?私はtを最初の入力とするt回のa、b、kの値を求めなければならないので、そこに置いています。

私はそれを正しく説明かはわからないが、私は誰かが私はRubyで変数を解決する唯一の方法は、参照することによってである

+0

ヒント:コードにいくつの配列を作成しますか?配列リテラル(例: '[]')を使う方法と、 'Array'ファクトリメソッド(' 'Array :: []'や '' Array :: new')を呼び出す方法の2通りがあります。ファクトリメソッドへの呼び出し回数をカウントし、コード内の配列リテラルの数を数えます。 –

+0

@JörgWMittag私は今それを見る。ありがとうございました!! (それは明示的に答えていない)私はそれを感謝した。 – kimsanity

答えて

1

をやろうとしたかを理解することができます願っています。それは

a = b = k = [] 

同じオブジェクトに3つの の参照を宣言する、と述べました。それを修正するには、別途配列を宣言:

t = gets.to_i 
a, b, k = [], [], [] 

for i in 0..t-1 do 
    a[i] = gets.to_i 
    b[i] = gets.to_i 
    k[i] = gets.to_i 
end 

を追記:forループは慣用ルビーではありません。ほら。 g。 Range#each(またはInteger#upto):

(0...t).each do |i| # or 0.upto(t - 1) do |i| 
    a[i] = gets.to_i 
    b[i] = gets.to_i 
    k[i] = gets.to_i 
end 
+0

私は見る!ありがとうございました!!! – kimsanity

関連する問題