我的一个ruby程序检测到数组中的奇数并将它们加在一起并不能提供正确的输出。鉴于我正在学习ruby并且这是一个逻辑错误,我不能轻易地扣除我犯错误的地方。 这是代码:
Master
问题:为什么输出错误?有什么办法让这个更清洁或更好? 我在cloud9上的一个名为oddball.rb的程序中运行了所有这些。
答案 0 :(得分:2)
return result
会导致代码在那时退出......它只会累加第一个数字,然后永远退出整个方法......它永远不会看到其他元素阵列。
现在已正确缩进代码,您可以看到此行在while循环中... 可能你希望它在while循环之外...当你正确地缩进你的代码时,更容易看到这种错误。你应该总是缩进你的代码......在你遇到这样的bug之前它似乎并不重要......它总是很重要。从现在开始这是一个好习惯。 ;)
答案 1 :(得分:1)
查看你的if语句:结果+ = 1,不要添加1但是添加你当前正在测试的数字:结果+ =数字[索引]
的SiS
答案 2 :(得分:1)
def odd_sum(numbers)
index = 0
result = 0
while index < numbers.length
if (numbers[index] % 2 != 0)
result += 1
end
index +=1
return result
end
end
puts odd_sum([1,2,4,5,7,9]) currently my output is 1 should be 22
puts odd_sum([0,6,4,4]) currently output 0
puts odd_sum([1,2,1]) currently output 1 should be 2
在result += 1
行上,每次有奇数时都会添加1
,因此它不是总和,而是计数。
在return result
行上,程序会在点击return
时立即结束。因此,由于第一个数组中的第一个数字是奇数,程序将结果增加1,然后返回结果。
您要做的是result += numbers[index]
,并在while循环结束时返回结果。
在Ruby中,通常有更好的方法来处理事情,而循环则意味着当你不知道循环的次数时。在这种情况下,你确切地知道了多少次,所以我建议使用迭代器。
def odd_sum(numbers)
result = 0
numbers.each do |num|
result += num if num.odd?
end
end
甚至更好
def odd_sum(numbers)
numbers.select(&:odd?).reduce(&:+)
end