Ruby每个语句都停留在while循环中

时间:2012-05-09 05:50:03

标签: ruby while-loop each

这里是StackOverflow的新手。我正在研究第一个欧拉问题并遇到了一个问题,我可以通过这个问题来迭代数组。它似乎与我有while循环设置的方式有关,但我无法弄明白。

这是我的代码:

#euler problem 1

numbers = [3,5]
sum = 0
i=1
total=0

numbers.each do |number|
  while i * number < 10
    adder = i * number
    total += adder
    i += 1
    puts total
  end
end

puts total

输出为3 9 18 18

知道为什么它不处理数组中的5?

1 个答案:

答案 0 :(得分:4)

您的问题是i在块外宣布,因此当number为5时,i已经为4,而while循环的条件会立即失败,因为{{1}是假的。试试这样:

20 < 10

如果你在代码中放了一点numbers = [3,5] sum = 0 total=0 numbers.each do |number| i = 1 while i * number < 10 #... end end puts total ,你会看到发生了什么:

puts

这将为您提供此输出:

i = 1
numbers.each do |number|
  puts "#{number}\ti = #{i}"
  while i * number < 10
    puts "\ti = #{i}"
    adder = i * number
    total += adder
    i += 1
  end
end

您将看到3 i = 1 i = 1 i = 2 i = 3 5 i = 4 的问题。