【问题标题】:Case statement don't work案例陈述不起作用
【发布时间】:2018-06-11 12:05:54
【问题描述】:

我正在从“Programming Ruby, The Pragmatic Programmers(2nd, 2005)”中学习 Ruby,但我被困在 Case 语句一章。 所以我从书中复制粘贴一些代码到我的版本中:

def kind
  puts "Type year and I'll tell you genre: "
  ask = gets.chomp

  kind = case ask
  when 1850..1889 then "Blues"
  when 1890..1909 then "Ragtime"
  when 1910..1929 then "New Orleans Jazz"
  when 1930..1939 then "Swing"
  when 1940..1950 then "Bebop"
  else "Jazz"
end


puts "You typed year #{ask}. Genre of music in that period is 
       #{kind}."
end

kind

因此,无论我放在哪一年,输出都是“爵士乐”......我工作不正确是什么?

【问题讨论】:

  • ask = gets.chomp.to_icase ask.to_i.
  • 这就是为什么我评论它并没有回答它。我不经常使用案例陈述。之后我在 IRB 中尝试过并删除了我的评论。
  • @Martin np,我已经提供了正确答案。

标签: ruby if-statement case


【解决方案1】:

gets.chomp 返回一个字符串,您将其与整数进行比较。

您可以在分配后检查ask

ask = gets.chomp
p ask

当您运行脚本并输入一个数字(例如 1940)时,您应该会在终端中看到 "1940"。数字周围的引号表明该变量包含一个字符串,而不是一个数字。 (仅供参考,这里不要使用puts,因为它不会显示引号。)

正如 mudasobwa 在他的评论中所写,解决此问题的方法是在比较之前将输入转换为一个数字:

ask = gets.chomp.to_i

如果您再次添加p ask,您现在应该会看到只有数字打印到终端,而没有任何" 围绕它。这表明该变量包含一个整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2010-10-30
    • 2016-05-13
    • 2016-02-21
    相关资源
    最近更新 更多