Ruby循环逻辑异常:返回欢迎界面后输入校验失效问题排查
Ruby洗衣卡充值机程序问题修复
问题描述
我是编程新手,刚学习Ruby,编写了一个模拟洗衣卡充值机的程序,用于练习loop、variable等知识点。程序会随机生成两种初始状态:无卡(NO CARD)或带有1-25美元余额的已存在卡片。程序整体可运行,但存在以下问题:当用户从菜单界面返回欢迎界面后,无论输入什么内容都会直接进入菜单界面,而非在输入非"enter"内容时显示"INVALID INPUT"。
错误分析
循环逻辑混乱(递归调用导致无限嵌套)
menu方法内的loop do是无限循环,当输入X调用welcome后,welcome执行完毕会直接回到menu的下一次循环,而非退出menu回到最外层的欢迎界面循环。buy_card和add_value里调用menu的逻辑同理,会导致多层循环嵌套,用户输入无法被最外层的判断逻辑处理,出现"返回欢迎界面后输入任何内容都进菜单"的问题。
变量作用域问题
Ruby方法参数是值传递,比如buy_card里修改balance = 0只会修改方法内部的局部变量,无法同步到外部的balance变量,导致卡片状态无法正确更新。
修复后的代码
# 随机生成初始状态:无卡或1-25美元余额 def card_value arr = [nil, (1..25)] value = arr.sample value.nil? ? "NO CARD" : rand(value) end # 使用实例变量存储余额,确保方法间共享状态 @balance = card_value # 错误提示方法 def invalid puts "INVALID RESPONSE" end # 欢迎界面方法,返回用户输入 def welcome puts "" puts "*******************************" puts " HERCULES ADD VALUE STATION" puts " WELCOME" puts "" puts " | Enter? |" puts "*******************************" puts " Type Enter to continue:" puts "-------------------------------" puts "" gets.chomp end # 显示卡片状态 def card_balance puts "" puts "-------------------------------" puts "" if @balance == "NO CARD" puts " | #{@balance} |" else puts " | BALANCE IS $#{@balance}</think_never_used_51bce0c785ca2f68081bfa7d91973934>
相关产品推荐
相关产品推荐

