-2

以下はCodeacademy.comからのコードです。理解できないことがあります。ループを繰り返すたびにis_primeの値が変わらないのはなぜですか。たとえば、数値8をテストすると、ループの結果、値2と3ではis_primeがfalseになりますが、4ではfalseになります(4で除算できるため)。ただし、5、6、および7の場合も同様です。では、ループの最後で、5、6、および7の後で値がfalseのままになるのはなぜですか?

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 に答える