我有一个解决方案,但不是我想要的解决方案。这是代码:
def sum(nums)
idx = 0
while idx < nums.length
nums[idx] = idx * nums[idx]
idx += 1
end
print nums
idx2 = 0
idx3 = idx2 + 1
while idx3 < nums.length
result = (nums[idx2].to_i) + (nums[idx3].to_i)
idx2 += 1
end
puts result
end
sum([2,3])
sum([2,3,5])
sum([2,3,5,2])
我不理解的两件事情发生在第二个while
循环中。首先,如果我使用while idx2 < nums.length
,我会得到一些不寻常的加法(数组总和回归为6,13,9)。如果我使用while idx3 < nums.length
,程序将不会一直运行。它停在第14行(在第二个循环),我必须在Ctrl+C
中插入它。
我确定我只是不明白这里发生了什么,所以我在寻求帮助。
我也意识到我可以使用inject
和each
循环来获得更简单的和解(以及map和procs / blocks和其他对象)。我正在尝试了解这些事情是如何运作的,而不只是提出解决方案。
答案 0 :(得分:1)
idx3 < nums.length
总是如此,因为你不会改变这些值,所以右边会比左边更大,你的循环永远不会结束。
使用其他条件,会导致我无法预测的事情,而不知道什么是nums,但可能不是你所期望的,因为你覆盖了你在结果上存储的值,所以只有最后一次迭代会让事情变得明显。
我在这里看不到数组总和:S
我建议您尝试简单地编写程序并一次测试一个概念。如果你一次测试所有这些,你就不会知道是什么导致了什么。
答案 1 :(得分:0)
在你的第二个while循环中,你没有递增idx3。因此,idx3永远不会达到num.length,你自己就会有一个无限循环。