Ruby新手求助:如何解决ArgumentError(参数数量不匹配)问题
解决Ruby理想体重计算程序的参数错误问题
错误原因
报错信息wrong number of arguments (given 0, expected 2)的核心问题:你在条件判断代码中直接写了ideal_weight,Ruby会将其视为调用ideal_weight方法但未传入任何参数,但该方法定义时要求必须传入height和gender两个参数,因此触发了参数数量不匹配的异常。
修复步骤
- 保存方法调用的返回值
调用ideal_weight(height, gender)时,把计算结果存入一个变量,避免后续误将方法名当作变量使用:
calculated_ideal_weight = ideal_weight(height, gender)
- 简化方法的返回逻辑(可选但更严谨)
Ruby默认会返回方法最后一行的执行结果,因此可以去掉方法内的变量赋值,直接返回计算式;同时增加未知性别的处理分支,避免返回nil引发后续错误:
def ideal_weight(height, gender) # Ideal weight calculation if gender == "E" (height - 100) - (height - 150) / 4 elsif gender == "K" (height - 100) - (height - 150) / 2 else nil # 处理未知性别情况 end end
- 修改条件判断的变量引用
将所有判断中的ideal_weight替换为刚才保存结果的变量,并增加未知性别的提示:
if calculated_ideal_weight.nil? puts "Invalid gender input. Please use 'E' or 'K'." elsif calculated_ideal_weight < weight puts "obese" elsif calculated_ideal_weight == weight puts "ideal" else puts "light" end
修复后的完整代码
def ideal_weight(height, gender) # Ideal weight calculation if gender == "E" (height - 100) - (height - 150) / 4 elsif gender == "K" (height - 100) - (height - 150) / 2 else nil end end puts "Please enter your height, weight and gender..." height, weight, gender = gets.chomp.split height = height.to_i weight = weight.to_i calculated_ideal_weight = ideal_weight(height, gender) if calculated_ideal_weight.nil? puts "Invalid gender input. Please use 'E' or 'K'." elsif calculated_ideal_weight < weight puts "obese" elsif calculated_ideal_weight == weight puts "ideal" else puts "light" end
内容的提问来源于stack exchange,提问作者ahailtotheKing
相关产品推荐
相关产品推荐

