初学者Ruby如果其他

初学者Ruby如果其他

问题描述:

我已检查过该程序是否接收数字和名称,它是。我想知道为什么当输入数字是1时不打印“fred”?初学者Ruby如果其他

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

看起来像数是一个字符串,不应攀比像“1”,“2”和“3”? – aishwarya

number是一个字符串,而不是一个整数。您可以转换为整数:

number = ARGF.read.chomp.to_i 

,或者你可以测试对字符串代替:

if number == "1" 
    ... 
    ... 
    ... 
+0

天哪,就是我写的几乎每一个程序都杀了我......转换为字符串和整数。无论如何,非常感谢您的答复,非常感谢。 – jimmyc3po

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

使用'case'语句有以下几个好处:执行速度快,读起来更容易,特别是当将多个值映射到单数动作时,由于不需要使用'或',并且不可能无意中将其与'='而不是与'=='比较。你也担心,唯一的答案是承认这是一个数组索引问题,根本不需要这种逻辑。 – tadman

+0

“执行速度快得多”... [引用需要] – DGM

+0

不是引用,但至少相关:http://*.com/questions/4178240/which-is-faster-in-ruby-a-hash -lookup-a-function-with-a-case-statement –

number是一个字符串。您可以检查通过印刷它的类是这样的:

p number.class 

您需要number转换为整数这样的:

number = ARGF.read.chomp.to_i 

但请记住这to_i将为无效的字符串返回0。只有当你确定传入的数据时才这样做。

试试这个在Codepad

我知道你正在学习if...else,但请记住,你也可以这样做:

number = ARGF.read.chomp.to_i - 1 
names = %w{fred betty barney} 

puts names[number] 
+0

永远不会想到这一点。 :D谢谢。 – jimmyc3po

+0

当我开始学习Ruby时,我也没有! – clem