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

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()

修复说明

  1. 输入处理修正:用gets.chomp.split.map(&:to_i)读取输入字符串,分割后转成整数数组,确保nums是正确的数组类型。
  2. 动态遍历数组:使用each_with_index遍历数组,自动获取元素索引,无需手动指定固定范围,适配任意长度的输入数组。
  3. 条件判断优化:用next if i >= j跳过i大于等于j的情况,避免重复计算和自身相加的无效情况。
  4. 结果返回优化:找到符合条件的索引后立即输出并返回,避免不必要的循环;同时补充了无结果时的提示。
  5. 索引输出修正:直接使用原始索引i和j,完全符合题目要求的元素索引输出规则。

内容的提问来源于stack exchange,提问作者Ngô Sơn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:05:20