Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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/2/python/318.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方法查找素数_Ruby - Fatal编程技术网

使用**自定义**Ruby方法查找素数

使用**自定义**Ruby方法查找素数,ruby,Ruby,我想将一个数字数组传递给我的is\u prime?方法,并返回数字是否有效。我不想使用: require 'prime' a = [1,2,3,4,5] Hash[a.zip(a.map(&Prime.method(:prime?)))] 这是学习经验。我当前的代码只输出数组中的第一个数字。有人能帮我理解我做错了什么吗?谢谢 def is_prime?(*nums) i = 2 nums.each do |num| while i < num

我想将一个
数字数组
传递给我的
is\u prime?
方法,并返回数字是否有效。我不想使用:

require 'prime'
a = [1,2,3,4,5]
Hash[a.zip(a.map(&Prime.method(:prime?)))]
这是学习经验。我当前的代码只输出数组中的第一个数字。有人能帮我理解我做错了什么吗?谢谢

def is_prime?(*nums)
i = 2
    nums.each do |num|
        while i < num
            is_divisible = ((num % i) == 0)
                if is_divisible == false
                    x = "#{num}: is NOT a prime number." #false
               else
                    x = "#{num}: is a prime number." #true
                end

            i +=1   
        end
        return x
    end
end

puts is_prime?(27,13,42)
def是素数?(*nums)
i=2
nums.每个do | num|
而我
is_可除=((num%i)==0)
如果可除==假
x=“#{num}:不是质数。”#false
其他的
x=“#{num}:是一个素数。”#真
结束
i+=1
结束
返回x
结束
结束
puts是_素数?(27,13,42)

您正在循环中返回

您的方法中存在一些错误:

def is_prime?(*nums)
   nums.each do |num|
      return false if num == 1
      next if num == 2 # 2 is the only even prime
      i = 2  # needs to be reset for each num
      while i < num 
        return false if num % i == 0  # num is not prime
        i += 1   
      end
   end
   true # We'll reach here only if all the numbers are prime
end
def是素数?(*nums)
nums.每个do | num|
如果num==1,则返回false
接下来,如果num==2,则2是唯一的偶数素数
i=2#需要为每个num重置
而我
如果num%i==0#num不是素数,则返回false
i+=1
结束
结束
是的,只有当所有的数字都是素数时,我们才能到达这里
结束

这将以与使用基本库相同的格式返回结果,并使用与自定义函数相同的逻辑:

def is_prime?(*nums)
  nums.each_with_object({}) do |num, hsh|
    hsh[num] = num > 1 && 2.upto(num - 1).none? { |i| num % i == 0 }
  end
end

puts is_prime?(27,13,42)
# => {27=>false, 13=>true, 42=>false}
既然您提到这只是为了学习,我假设您知道,a是比暴力迭代更好的方法


如果您想要解释上述代码的工作原理或进一步帮助理解当前代码不工作的原因,请在注释中告诉我。

您的每个循环中都有一个
return
语句。它将始终退出循环。另外,您的
是可除的
语句毫无意义,为什么要将布尔值存储在变量中,然后测试它?只需将
num%i==0
移动到您的if语句条件中即可。@HunterMcMillen谢谢我按照您的建议更新了代码,但是逻辑仍然不正确,因为我没有得到所需的输出。还有其他建议吗?谢谢,罗夫!对你来说容易的业力!如果我移动
返回
到循环外部。它返回undefined。此外,代码似乎总是返回
false
。如果所有数字都是素数,则希望该方法返回true,否则返回false?是的,这就是我尝试执行的操作。您的代码只返回
数组中
第一个
索引。您的编辑也给出了相同的结果。