我已经检查过该程序是否正在接收号码和名称。我想知道为什么输入数字为1时不打印“fred”?
number = ARGF.read.chomp
names = %w{fred betty barney}
if number == 1
puts names[0]
elsif number == 2
puts names[1]
elsif number == 3
puts name[2]
end
答案 0 :(得分:4)
number
在这里可能是一个字符串,但您要将其与整数进行比较。
1 == '1' # false
尝试
number = ARGF.read.chomp.to_i # note the to_i here
names = %w{fred betty barney}
if number == 1
puts names[0]
elsif number == 2
puts names[1]
elsif number == 3
puts names[2]
end
此外,如果要根据单个变量的多个值采用不同的路径,则可以使用case/when
语句。这通常是处理这种流动的更简洁方法。
number = ARGF.read.chomp.to_i
names = %w{fred betty barney}
case number
when 1
puts names[0]
when 2
puts names[1]
when 3
puts names[2]
end
或者在这种情况下,更简单:
number = ARGF.read.chomp.to_i
names = %w{fred betty barney}
puts names[number-1]
应该有用。
答案 1 :(得分:3)
我知道你正在学习if...else
,但请记住,你也可以这样做:
number = ARGF.read.chomp.to_i - 1
names = %w{fred betty barney}
puts names[number]
答案 2 :(得分:2)
number
是一个字符串,不是整数。您可以转换为整数:
number = ARGF.read.chomp.to_i
或者您可以测试字符串:
if number == "1"
...
...
...
答案 3 :(得分:2)
number
是一个字符串。你可以通过打印它的类来检查它:
p number.class
您需要将number
转换为如下整数:
number = ARGF.read.chomp.to_i
请注意,to_i
会为无效字符串返回0
。只有在确定传入数据时才能执行此操作。
在Codepad上试试。