我的案例陈述不起作用,但逻辑​​对我来说是正确的

时间:2016-07-16 03:55:21

标签: ruby

此程序打印第一个语句,并在输入数字后退出,例如" 5",不打印任何其他内容。根据我在case声明中提出的逻辑,我希望它输出"你不是成年人:("对于5.其他低于120的值不起作用预期要么。

有什么问题?

print "Enter you age "
age = gets.chomp

if age.to_i<120
  case age.to_i
  when age.to_i<18
    puts "You're not an adult :("
    puts "Sorry"

  when age.to_i>18
    puts "You are now an adult!"
    puts "phew"
  end
end 

2 个答案:

答案 0 :(得分:4)

试试这个。请注意,我已从age.to_i声明中删除case

print "Enter you age "
age = gets.chomp

if age.to_i<120
    case
        when age.to_i<18
            puts "You're not an adult :("
            puts "Sorry"

        when age.to_i>18
            puts "You are now an adult!"
            puts "phew"
        end
    end 

修改

按顺序解释一下。

当你这样写:

case foo
  when "bar"
    ...

这实质上意味着:

if "bar" === foo
  ...

所以你的代码有点像这样:

if age.to_i<18 === age.to_i
  ...

没有多大意义。如果您只是在case后面写任何内容,那么它更像是常规if语句。 E.g。

case
  when foo === "bar"
    ...

大致意味着

if foo === "bar"
  ...

这就是你想要的。我希望有所帮助!

答案 1 :(得分:0)

这是一个清理过的版本:

print "Enter you age "
age = gets.chomp.to_i

case age
when 0..18
  puts "You're not an adult :("
  puts "Sorry"
when 18..120
  puts "You are now an adult!"
  puts "phew"
else
  puts "I think you're lying!"
end

将所有这些内容折叠成一个case语句并使用范围可以更清晰地发生这些事情。