程序冻结:添加阵列元素



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

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循环来获得更简单的求和解决方案(以及映射和procs/block和其他对象)我正在努力了解这些事情是如何运作的,而不仅仅是想出一个解决方案。

idx3 < nums.length

永远都是真的,因为你没有改变这两个值,所以右边会比左边大,你的循环永远不会结束。

相反,如果不知道nums是什么,使用另一个条件将导致一些我无法预测的结果,但可能不是你所期望的,因为你正在覆盖你在结果中存储的值,所以只有最后一次迭代才会引起注意。

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

我建议你试着简化你的程序,一次测试一个概念。如果你一次测试所有这些,你就不知道是什么导致了什么。

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

最新更新