2017-04-19 57 views
0

我仍然獲得了Ruby的基礎知識,並且完成了一項任務以重新創建河內塔。我真的很想濃縮我的代碼,但爲此,我需要根據用戶輸入調用特定的數組。例如:使用輸入來確定要調用哪個數組

Stack_1=[5,4,3] 
Stack_2=[5,2,1] 
Stack_3=[5] 

puts "Please select a tower" 
tower_select=gets.chomp.to_i 
puts "Please select where you'd like to move" 
tower_move=gets.chomp.to_i 

if Stack_{tower_select}[-1] < Stack_{tower_move}[-1] 
    Stack_{tower_move} << Stack_{tower_select}[-1] 
    Stack_{tower_select}.delete_at(-1) 
else puts "ERROR: Invalid move" 
end 

這可能嗎?

+0

當問你關於你寫的代碼的問題時,使用適當的Ruby語法是很重要的。 'Stack_ {tower_select} [ - 1]'無效並導致「NoMethodError:未定義的方法'Stack_'for main:Object」。請參閱「[mcve]」和鏈接頁面。 –

回答

1

把你的堆棧放在一個數組或散列中,一切都變得簡單。這將使用哈希(他們看起來嚇人在第一,但有一件輕而易舉的處理):

stacks = {1 => [5,4,3], 
      2 => [5,2,1], 
      3 => [5]} # a Hash 

puts "Please select a tower" 
tower_select = gets.chomp.to_i 
puts "Please select where you'd like to move" 
tower_move = gets.chomp.to_i 

if stacks[tower_select][-1] < stacks[tower_move][-1] 
    stacks[tower_move] << stacks[tower_select][-1] 
    stacks[tower_select].delete_at(-1) 
    #or just: stacks[tower_move] << stacks[tower_select].pop 
else puts "ERROR: Invalid move" 
end 

p stacks 
+0

天才!非常感謝! – dande313

1

是的,這可以使用Ruby的反射方法:

if const_get(:"Stack_#{tower_select}")[-1] < const_get(:"Stack_#{tower_move}")[-1] 
    const_get(:"Stack_#{tower_move}") << const_get(:"Stack_#{tower_select}")[-1] 
    const_get(:"Stack_#{tower_select}").delete_at(-1) 
else 
    puts 'ERROR: Invalid move' 
end 

但你不想要做到這一點。認真。別。只是...不。

每當你覺得需要有變量(或在這種情況下常量,但它並不重要)命名爲喜歡foo_1foo_2等有更好的解決方案。你知道,Ruby已經有了一個數據結構,你可以把它放入你想要通過索引訪問的東西。他們被稱爲數組,你已經瞭解他們,因爲你實際上在代碼中使用他們已經:

stacks = [[5, 4, 3], [5, 2, 1], [5]] 

puts 'Please select a tower' 
tower_select = gets.to_i - 1 # somehow, "normal" humans count from 1 … 
puts "Please select where you'd like to move" 
tower_move = gets.to_i - 1 

if stacks[tower_select].last < stacks[tower_move].last 
    stacks[tower_move] << stacks[tower_select].pop 
else 
    puts 'ERROR: Invalid move' 
end 

[您可能會注意到一對夫婦的我擺在那裏的其他修復。你的代碼沒有錯,但是這更習慣。]

+0

太棒了!非常感謝你的幫助! – dande313

相關問題