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

Ruby计算器代码可运行但无法返回预期计算结果求助

计算器代码问题分析与修复

你的代码存在以下几个关键问题:

  • 函数定义语法错误:def calculator(num1,num2)末尾缺少冒号:,Ruby语法要求方法定义后必须加冒号
  • 变量类型错误:
    • 第一个数字num1仅使用gets.chomp获取,未转换为数值类型(to_i或to_f),后续计算会变成字符串拼接而非数值运算
    • 运算符opp被错误转换为浮点数to_f,运算符是字符串类型,转成浮点数后会变成0.0,永远无法匹配"+"/"-"等字符串运算符
  • 条件判断逻辑错误:第一个if判断opp == "",但正确的加法运算符应该是"+",且此时opp已经是浮点数,永远不会匹配空字符串
  • 输出内容错误:所有分支里的puts"num1+num2"这类代码,只是输出字符串文本,而非执行num1 + num2的计算结果
  • 递归与语法缺失:
    • 最后一行的递归调用calculator(num1,num2)会导致无限循环,完全没必要
    • 缺少if语句的闭合end和函数的闭合end,语法不完整

修正后的代码:

def calculator
  puts "Enter your first number"
  num1 = gets.chomp.to_f

  puts "Enter operator (+, -, *, /, %)"
  opp = gets.chomp

  puts "Enter your second number \u{2753}"
  num2 = gets.chomp.to_f

  result = case opp
           when "+" then num1 + num2
           when "-" then num1 - num2
           when "*" then num1 * num2
           when "/" 
             num2 == 0 ? "Cannot divide by zero" : num1 / num2
           when "%" 
             num2 == 0 ? "Cannot mod by zero" : num1 % num2
           else "Wrong operator"
           end

  puts "Your Result is #{result}"
end

# 调用计算器函数
calculator

修正说明:

  • 去掉了函数参数,因为参数会被内部输入覆盖,完全没必要
  • 所有数字输入都转换为to_f,支持整数和小数计算
  • 运算符保留为字符串类型,不再转换为浮点数
  • 使用case语句替代多个if-elsif,逻辑更清晰
  • 增加了除数为0的异常判断,避免运行错误
  • 移除了错误的递归调用,直接计算并输出结果
  • 补全了所有语法所需的end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:10