2017-04-01 46 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(' ') 
相关问题