Ruby代码调试求助:已返回值但stdout无输出,求排查
代码问题分析与修复
核心问题点
- 输入处理错误:
main函数里nums = gets().to_i把本该是数组的变量改成了整数,导致two_sum中无法通过索引访问元素。正确的数组输入应该读取一行字符串,分割后转成整数数组。 - 循环范围硬编码:
for i in 0..3 - 1固定了数组长度为3,无法适配任意长度的输入数组,得用nums.length动态确定循环范围。 - 冗余条件:
i < j已经包含i != j的逻辑,没必要重复判断。 - 返回值无效:循环结束后返回的
i和j是最后一次循环的索引,不是符合条件的结果;而且找到符合条件的索引后没提前终止循环,会继续无效遍历。 - 索引偏移错误:题目要求输出元素的原始索引,代码里用
i-1和j-1会导致索引错位(比如原数组索引0会被输出成-1),不符合需求。
修复后的代码
def two_sum(nums, target) nums.each_with_index do |num1, i| nums.each_with_index do |num2, j| next if i >= j if num1 + num2 == target puts "[#{i}, #{j}]" return i, j # 找到结果后提前终止循环并返回 end end end # 处理无符合条件组合的情况 puts "未找到符合条件的索引组合" return nil end def main() puts "请输入目标值:" target = gets.chomp.to_i puts "请输入整数数组(用空格分隔):" nums = gets.chomp.split.map(&:to_i) two_sum(nums, target) end main()
修复说明
- 输入处理修正:用
gets.chomp.split.map(&:to_i)读取输入字符串,分割后转成整数数组,确保nums是正确的数组类型。 - 动态遍历数组:使用
each_with_index遍历数组,自动获取元素索引,无需手动指定固定范围,适配任意长度的输入数组。 - 条件判断优化:用
next if i >= j跳过i大于等于j的情况,避免重复计算和自身相加的无效情况。 - 结果返回优化:找到符合条件的索引后立即输出并返回,避免不必要的循环;同时补充了无结果时的提示。
- 索引输出修正:直接使用原始索引
i和j,完全符合题目要求的元素索引输出规则。
内容的提问来源于stack exchange,提问作者Ngô Sơn
相关产品推荐
相关产品推荐

