You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Ruby中if/elsif语句出现循环问题?

Ruby游戏决策循环问题的解决办法

你的代码出现循环无法推进的核心原因是:gets方法会读取用户输入时包含末尾的换行符(按下回车键产生的\n)。比如用户输入sleep回车后,decision实际是sleep\n,和你判断的sleep字符串完全不相等;同理输入get up回车后,decision是get up\n,也匹配不上get up,所以每次都会触发else分支,重新调用getup_or_sleep?方法,导致无限循环。

你只需要用chomp方法去掉输入字符串末尾的换行符,就能让判断逻辑正常工作,修正后的代码如下:

def getup_or_sleep?
  puts "Cole"
  puts "----"
  puts "Will you get up or go back to sleep?"
  # 用chomp移除输入末尾的换行符,确保和判断的字符串一致
  decision = gets.chomp
  if decision == "sleep"
    puts "Cole"
    puts "----"
    puts "You decide to go back sleep. It is far too early."
    # 后续可以在这里添加跳转新方法的逻辑
  elsif decision == "get up"
    Exposition.stretch
  else
    puts "输入无效,请输入'sleep'或者'get up'。"
    Exposition.getup_or_sleep?
  end
end

额外提两个小建议:

  • Ruby里语句末尾的分号;不是必需的(除非一行写多个语句),去掉后代码会更整洁。
  • 当前用递归处理无效输入的方式,在小游戏场景下没问题,但如果想更规范,也可以换成loop循环结构来实现重复提示,避免递归深度过大的潜在问题。

内容的提问来源于stack exchange,提问作者Kez_Connected

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:25:16