Ruby 语法错误?红宝石虫?实例变量以+;递增时出现问题1.
似乎您正试图使用Ruby 语法错误?红宝石虫?实例变量以+;递增时出现问题1.,ruby,Ruby,似乎您正试图使用@isFalse找出该范围内的素数。如果是这种情况,您应该改为使用以下代码修改(尽管我不建议以这种方式检查素数,而且代码效率很低): 基本上,我删除了实例变量@isFalse,并在第二个方法中检查了一个数字是否为素数。这样代码就更干净了,并且真正做到了您希望它做的事情 代码的问题是每次调用第一个方法时,isPrime?都会将@isFalse重置为0,因此不能正确反映给定范围内的素数 2 true 3 true About to increment @isFalse 4 false
@isFalse
找出该范围内的素数。如果是这种情况,您应该改为使用以下代码修改(尽管我不建议以这种方式检查素数,而且代码效率很低):
基本上,我删除了实例变量@isFalse
,并在第二个方法中检查了一个数字是否为素数。这样代码就更干净了,并且真正做到了您希望它做的事情
代码的问题是每次调用第一个方法时,isPrime?
都会将@isFalse
重置为0
,因此不能正确反映给定范围内的素数
2 true
3 true
About to increment @isFalse
4 false
5 true
About to increment @isFalse
6 false
7 true
About to increment @isFalse
8 false
About to increment @isFalse
9 false
About to increment @isFalse
10 false
--------------------------------------------------
FALSE values in range from (2 thru 10): 1
TRUE values in range from (2 thru 10): 8
def isPrime?(num)
i=2
而我
可除=((数量%i)==0)
如果可以整除,则返回false
i+=1
结束
真的
结束
def素数(最大值)
开始时间=现在
是_素数=0吗
(2..max)。每个do|p|
如果是isPrime?(p)
是_素数+=1吗
把p
结束
endTime=Time.now
放入“--------------------------------------------------------------”
将“从(2到#{max}范围内的假值:#{is#u prime}\n从(2到#{max})范围内的真值:#{max-1-is#u prime}”
将“\n计算的总时间为35;{endTime-startTime}秒!”
结束
素数(10)
您似乎正在尝试使用@isFalse
查找该范围内的素数。如果是这种情况,您应该改为使用以下代码修改(尽管我不建议以这种方式检查素数,而且代码效率很低):
基本上,我删除了实例变量@isFalse
,并在第二个方法中检查了一个数字是否为素数。这样代码就更干净了,并且真正做到了您希望它做的事情
代码的问题是每次调用第一个方法时,isPrime?
都会将@isFalse
重置为0
,因此不能正确反映给定范围内的素数
2 true
3 true
About to increment @isFalse
4 false
5 true
About to increment @isFalse
6 false
7 true
About to increment @isFalse
8 false
About to increment @isFalse
9 false
About to increment @isFalse
10 false
--------------------------------------------------
FALSE values in range from (2 thru 10): 1
TRUE values in range from (2 thru 10): 8
def isPrime?(num)
i=2
而我
可除=((数量%i)==0)
如果可以整除,则返回false
i+=1
结束
真的
结束
def素数(最大值)
开始时间=现在
是_素数=0吗
(2..max)。每个do|p|
如果是isPrime?(p)
是_素数+=1吗
把p
结束
endTime=Time.now
放入“--------------------------------------------------------------”
将“从(2到#{max}范围内的假值:#{is#u prime}\n从(2到#{max})范围内的真值:#{max-1-is#u prime}”
将“\n计算的总时间为35;{endTime-startTime}秒!”
结束
素数(10)
每次调用isPrime?
,将@isFalse
重置为0。因此,@isFalse
为1的结果是上次调用isPrime?
时的结果(当num
等于10时,将@isFalse
增加到1)。每次调用isPrime?
时,@isFalse
将重置为0。因此,@isFalse
为1的结果是上次调用isPrime?
时的结果(其中num
等于10,将@isFalse
增加到1)。@isFalse=0
在isPrime?
方法中。把它弄出去 @isFalse=0
在您的isPrime?
方法中。把它弄出去 既然您的问题已经得到了回答,我想建议一个更像Ruby的解决方案:
您希望方法是否为素数?
除了确定num
是否为素数之外,什么都不做:
def isPrime?(num)
i = 2
while i < num
divisible = ((num % i) == 0)
return false if divisible
i += 1
end
true
end
def primes(max)
startTime = Time.now
is_prime = 0
(2..max).each do |p|
if isPrime?(p)
is_prime += 1
puts p
end
endTime = Time.now
puts "--------------------------------------------------"
puts " FALSE values in range from (2 thru #{max}): #{is_prime} \n TRUE values in range from (2 thru #{max}): #{max-1-is_prime}"
puts "\nTotal time to calculate is #{endTime - startTime} seconds!"
end
primes(10)
使用方法nbr\u primes
计算素数
def is_prime?(num)
(2...num).each {|i| return false if num % i == 0}
true
end
def丁腈橡胶底漆(最大值)
如果最大值小于2,则返回false
(2..max).reduce(0){| tot,i | tot+(is|u prime?(i)?1:0)}
结束
p nbr_素数(20)#=>8
有几点:
- 我删除了对时间和输出格式的引用,因为它们不是问题的核心
- 用小写字母和下划线命名方法是Ruby的惯例
,因为它有三个点,是从2到(包括)(2…num)
num-1的序列。我们可以改为写
(两点),这是一些人喜欢的(2..num-1)
将(2..max).reduce(0){| tot,i |…}
从2迭代到并包括i
max
,即tot
的累加器,对于2到REDUCT
之间的每一个被发现为素数的数字,它将递增1。表达式返回max
的值,该值由方法tot
返回nbr\u primes
是inject
的同义词reduce
- 在检查一个数
是否为素数时,您只需检查它是否可被数除至n
Math.sqrt(n).to_i
- 使用
,您不必重新发明轮子。例如,需要“prime”
,和Prime.Prime?(7)#=>true
Prime.take_而{p | p[2,3,5,7]。size+1#=>4
是否为素数?
除了确定num
是否为素数之外,什么都不做:
def isPrime?(num)
i = 2
while i < num
divisible = ((num % i) == 0)
return false if divisible
i += 1
end
true
end
def primes(max)
startTime = Time.now
is_prime = 0
(2..max).each do |p|
if isPrime?(p)
is_prime += 1
puts p
end
endTime = Time.now
puts "--------------------------------------------------"
puts " FALSE values in range from (2 thru #{max}): #{is_prime} \n TRUE values in range from (2 thru #{max}): #{max-1-is_prime}"
puts "\nTotal time to calculate is #{endTime - startTime} seconds!"
end
primes(10)
使用方法nbr\u primes
计算素数
def is_prime?(num)
(2...num).each {|i| return false if num % i == 0}
true
end
def丁腈橡胶底漆(最大值)
如果最大值小于2,则返回false
(2..max).reduce(0){| tot,i | tot+(is|u prime?(i)?1:0)}
结束
p nbr_素数(20)#=>8
有几点:
- 我删除了对时间和输出格式的引用,因为它们不是问题的核心
- 命名具有较低CA的方法是Ruby约定