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}"
代码说明
- 保留原代码的
inputs.sample逻辑,随机选取一组数组。 - 初始化
sum为0,用于存储奇数的累加结果。 - 遍历选中的数组,将每个字符串元素转为整数
num。 - 判断
num是否为奇数,若是则加到sum中。 - 最后输出选中的数组和奇数的和,方便验证结果。
也可以用更简洁的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
相关产品推荐
相关产品推荐

