2017-03-26 84 views
1

我想獲得多個輸入並將其分配給不同的變量(在irb中),但我似乎無法讓它工作。我只能做第一個變量,但在接下來的三個,最後一個輸入被分配給其他2(我有4個)Ruby:提示多輸入

我想要做的是,基於第一個輸入(比如2),它會提示輸入3次以上2次。

t = gets.to_i 

這是第一個輸入,它被正確分配。 然後它會提示輸入3個輸入,但只有最後一個輸入被保存並分配給所有三個變量。

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

它會接受3個輸入,但只有最後一個得到保存?

說,如果我輸入(對於第一次迭代)

1 
10 
3 

第一提示後(我輸入2) 一個,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 

是它因爲它在循環?我把它放在那裏,因爲它必須要求t,t是第一個輸入的t,a,b和k的值。

我不知道我是否正確解釋,但我希望有人能明白我試圖做

+0

提示:您在代碼中創建了多少個數組?有兩種方法可以使用數組文字(例如'[]')或調用其中一個'Array'工廠方法(例如'Array :: []'或'Array :: new')來創建數組。計算對工廠方法的調用次數並計算代碼中數組文字的數量。 –

+0

@JörgWMittag我現在看到它。謝謝!! (尤其是沒有明確回答):)我讚賞它。 – kimsanity

回答

1

解決一個變量在Ruby中是參考的唯一途徑。這就是說,

a = b = k = [] 

聲明瞭三個引用同一個對象。爲了修正它,分別聲明數組:

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