我不知道为什么,但它一直说 prime?(num) 方法未定义...
我试图让它找到 1 到 20 之间素数的乘积
class LCM200
def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
return true
end
end
#if __FILE__ == $0
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
#end
end
最佳答案
问题是因为您在类中运行代码。在一个类中,prime?
被定义为该类的一个实例方法,但是当您在类中运行 for 循环时,您调用的是 prime ?
就好像它是一个类方法(又名静态方法)。要修复它,只需删除类声明:
def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
end
# Note: moved return true to here since otherwise it would return
# true after a single iteration
return true
end
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
您还可以用更“Ruby-ish”的方式定义 prime?
:
def prime? num
if num == 1
false
else
(2..Math.sqrt(num)).all? { |i| i % num != 0 }
end
end
Enumerable#all? 的文档
关于ruby - ruby 语法中的未定义方法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730501/