我最初是用JavaScript编写的,然后在此处发布以寻求帮助(我得到了)。然后,我用Ruby编写了它,但它没有按预期工作。看起来代码与Ruby中的代码几乎相同。
预期结果: 29
实际结果: 2639
prime = 0
temp = 0
factor = 3
i = 3
num = 13195
while factor < num
if num % factor == 0
while i < factor
if factor % i == 0
temp = prime
break
else
temp = factor
end
i = i + 2
end
// i initializes back to 3
// so next factor can properly iterate through loop
i = 3
prime = temp
end
factor = factor + 2
end
i = 3
puts prime
这是当我以JavaScript程序要求时的答案链接:
https://stackoverflow.com/a/50970934/7217977
答案 0 :(得分:4)
在Javascript中,for (let i = 3; i < factor; i += 2)
将i
初始化为3,然后循环。但是在您的Ruby代码中,刚开始只初始化一次i
一次,然后每个循环都重复使用i
的一个值,而没有将其重置为3。
Ruby的for循环翻译方式如下
(3...factor).step(2) do |i|
# loop code
end
这将创建一个局部块i
,该块在每次循环迭代时都会重置,并且不会受到外部作用域的干扰。