Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 语法错误?红宝石虫?实例变量以+;递增时出现问题1._Ruby - Fatal编程技术网

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…num)
    ,因为它有三个点,是从2到(包括)
    num-1的序列。我们可以改为写
    (2..num-1)
    (两点),这是一些人喜欢的
  • (2..max).reduce(0){| tot,i |…}
    i
    从2迭代到并包括
    max
    tot
    ,即
    REDUCT
    的累加器,对于2到
    max
    之间的每一个被发现为素数的数字,它将递增1。表达式返回
    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

既然您的问题已经得到了回答,我想建议一个更像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
有几点:

  • 我删除了对时间和输出格式的引用,因为它们不是问题的核心
  • 命名具有较低CA的方法是Ruby约定