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

Ruby实现从随机数组中求和奇数整数的问题求助

错误原因分析
  • 变量作用域问题:num是each块内的局部变量,块外无法访问,所以块外调用num.to_i会直接抛出NameError。
  • 累加逻辑错误:sum = num只是把当前遍历到的字符串赋值给sum,既没有做累加操作,也没有将字符串转为整数类型。
  • 逻辑顺序错误:判断奇数的代码写在each循环外面,根本没对每个元素进行遍历判断,无法实现逐个检查奇数的需求。
正确实现代码
inputs = [
  ["9", "5", "4"],
  ["20", "40", "60"],
  ["1", "3", "19"]
]
numbers = inputs.sample
sum = 0

numbers.each do |str_num|
  num = str_num.to_i
  sum += num if num.odd?
end

puts "随机选中的数组:#{numbers}"
puts "数组中奇数的和:#{sum}"
代码说明
  1. 保留原代码的inputs.sample逻辑,随机选取一组数组。
  2. 初始化sum为0,用于存储奇数的累加结果。
  3. 遍历选中的数组,将每个字符串元素转为整数num。
  4. 判断num是否为奇数,若是则加到sum中。
  5. 最后输出选中的数组和奇数的和,方便验证结果。

也可以用更简洁的Ruby风格实现:

inputs = [
  ["9", "5", "4"],
  ["20", "40", "60"],
  ["1", "3", "19"]
]
numbers = inputs.sample
odd_sum = numbers.map(&:to_i).select(&:odd?).sum

puts "随机选中的数组:#{numbers}"
puts "数组中奇数的和:#{odd_sum}"

这段代码先用map(&:to_i)把所有字符串转成整数,再用select(&:odd?)筛选出奇数,最后用sum直接求和,更符合Ruby的简洁特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:12:06