-2

下面是来自 Codeacademy.com 的一些代码。有一点我不明白:为什么 is_prime 的值不会随着循环的每次迭代而改变?例如,测试数字 8,可能是循环导致 is_prime 对于值 2 和 3 为假,但对于 4,它变为假(因为您可以除以 4)。但是,对于 5,6 和 7,它又是真的。那么为什么在循环结束时,即使在 5,6 和 7 之后,该值仍保持为假,这会使它再次为真?

def prime(n)
  puts "That's not an integer." unless n.is_a? Integer
  is_prime = true
  for i in 2..n-1
    if n % i == 0
      is_prime = false
    end
  end
  if is_prime
    puts "#{n} is prime!"
  else
    puts "#{n} is not prime."
  end
end

prime(2)
prime(9)
prime(11)
prime(51)
prime(97)
4

1 回答 1

3

您所描述的行为是如果这样写会发生什么:

for i in 2..n-1
  if n % i == 0
    is_prime = false
  else
    is_prime = true
  end
end

但是在您的代码中没有else. 如果数字不可整除,则不会发生任何事情,因此变量保持原样。

于 2012-11-01T14:39:57.870 回答