2017-04-01 49 views
1

我試圖將數組數組傳遞給case語句。 例如:我要求用戶輸入一個值,例如12.然後我將它分成一個數組[1,2]。然後我將它傳遞給我的方法案例聲明。我的案例陳述是輸出1和2的數字格式。將數組中的單個元素傳遞給Ruby中的case語句 - LCD顯示號碼

我的問題: 我不能讓它打印多於1個元素的輸入。 如何輸出1和2作爲1數組的數字編號?或與用戶輸入?我的代碼遠嗎?

我的代碼:

puts "Enter numbers between 0-9 up to 2 digits: " 

x = gets.chomp 
x = x.split('') 

def digital_number(n) 

digits = n 

#Start case for digit input 
    case digits 
    when ["1"] 
    puts " | " 
    puts " " 
    puts " | " 
    puts " " 
    puts n 

    when ["2"] 
    puts " - " 
    puts " |" 
    puts " - " 
    puts "| " 
    puts " - " 

    else 
    puts "That is not an available number." 

    end 
end 

digital_number(x) 

回答

0

x是你的數字數組。你應該每個數字傳遞給case順序:

number = gets.chomp 
digits = number.split('') 

digits.each { |digit| digital_number(digit) } 

和案例數字:

case digit 
when '1' 
    # ... 
when '2' 
    # ... 
end 
+0

Thanks!被困惑了一秒鐘,因爲我把.each函數放在我的案例之上。在我的大腦中,我想到了你所放的東西......但我認爲之前我沒有正確寫下它。 – balee1991

+0

你知道我現在可以並排輸出數字嗎?由於它遍歷每個數字並將其輸出到一個新行中。有沒有辦法將它們水平放置?所以它橫向打印1 2而不是垂直1,2? – balee1991

+0

如果您逐個打印數字,則不可能。您可以將每行保存爲一個變量,即'when'1'lines [0] <<'| 'lines [1] <<'''等等('lines'是這裏的一個字符串數組),然後逐行打印,即'lines.each {| line |放線}'。 –

0

這是非常相似的瓦西里·尤金的回答只是掃描和同他還曾在說他評論。

puts "Enter numbers between 0-9 up to 2 digits: " 

x = gets.chomp 
@arr = [] 

def digital_number(n) 

    #Start case for digit input 
    case n 
    when "1" 
    @arr << " | " 
    @arr << " | " 
    puts n 

    when "2" 
    @arr << "-" 
    @arr << " |" 
    @arr << "-" 
    @arr << "| " 
    @arr << "-" 
    else 
    puts "That is not an available number." 
    end 
end 

x.scan(/\w/).each{|d| digital_number(d)} 
puts @arr.join(' ') 
+0

我想我有一個想法來操縱你給我的東西。我會試試看,如果我沒有錯的話轉發它... – balee1991

+0

如果這個工作,你應該選擇我的答案,歡呼。 – Jake

+0

我提出了幫助的人。但它說它不能在15個聲望以下公開顯示。 – balee1991

0

下面的代碼解決了我的問題。如果您想要將參數添加到代碼中,可以刪除ARGV的'#'。但只是爲了終端使用,我們有gets.chomp。感謝您的幫助。這解決了我的問題,即使它可能不是最高效的。

# Add an argument in the terminal and 
# .to_s converts the argument into a string 
# so that ".scan" can take a string argument 

#x = ARGV.to_s 

x = gets.chomp 
puts "Arguments entered is between 0-9: #{x}" 

#These are empty arrays that get added in the cases 
@arr1 = [] 
@arr2 = [] 
@arr3 = [] 
@arr4 = [] 
@arr5 = [] 

def digital_number(n) 

#Start case for digit input 
case n 

when "0" 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " " 
@arr4 << "| |" 
@arr5 << " - " 

when "1" 
@arr1 << " " 
@arr2 << " | " 
@arr3 << " " 
@arr4 << " | " 
@arr5 << " " 

when "2" 
@arr1 << " - " 
@arr2 << " |" 
@arr3 << " - " 
@arr4 << "| " 
@arr5 << " - " 

when '3' 
@arr1 << " - " 
@arr2 << " |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

when '4' 
@arr1 << " " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " " 

when '5' 
@arr1 << " - " 
@arr2 << "| " 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

when '6' 
@arr1 << " - " 
@arr2 << "| " 
@arr3 << " - " 
@arr4 << "| |" 
@arr5 << " - " 

when '7' 
@arr1 << "-- " 
@arr2 << " |" 
@arr3 << " " 
@arr4 << " |" 
@arr5 << " " 

when '8' 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << "| |" 
@arr5 << " - " 

when '9' 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

else 
    puts "That is not an available number." 
end 
end 
# This part iterates the method for each numbers inputted 
x.scan(/\w/).each{|d| digital_number(d)} 

# Output # 
puts " " 
puts @arr1.join(' ') 
puts @arr2.join(' ') 
puts @arr3.join(' ') 
puts @arr4.join(' ') 
puts @arr5.join(' ') 
相關問題