初学者Ruby if else

时间:2011-11-18 18:38:55

标签: ruby if-statement

我已经检查过该程序是否正在接收号码和名称。我想知道为什么输入数字为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

4 个答案:

答案 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上试试。