程序冻结:添加数组元素

时间:2014-11-09 00:47:00

标签: ruby arrays

我有一个解决方案,但不是我想要的解决方案。这是代码:

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中插入它。

我确定我只是不明白这里发生了什么,所以我在寻求帮助。

我也意识到我可以使用injecteach循环来获得更简单的和解(以及map和procs / blocks和其他对象)。我正在尝试了解这些事情是如何运作的,而不只是提出解决方案。

2 个答案:

答案 0 :(得分:1)

idx3 < nums.length

总是如此,因为你不会改变这些值,所以右边会比左边更大,你的循环永远不会结束。

使用其他条件,会导致我无法预测的事情,而不知道什么是nums,但可能不是你所期望的,因为你覆盖了你在结果上存储的值,所以只有最后一次迭代会让事情变得明显。

我在这里看不到数组总和:S

我建议您尝试简单地编写程序并一次测试一个概念。如果你一次测试所有这些,你就不会知道是什么导致了什么。

答案 1 :(得分:0)

在你的第二个while循环中,你没有递增idx3。因此,idx3永远不会达到num.length,你自己就会有一个无限循环。