【问题标题】:Ruby: "in `<=': comparison of Fixnum with Array failed (ArgumentError)"Ruby:“在 `<=' 中:Fixnum 与 A​​rray 的比较失败(ArgumentError)”
【发布时间】:2010-12-26 02:15:44
【问题描述】:

希望能比我上一个不那么新奇……

无论如何,我正在编写一个将数字简化为素数的小应用程序,主要是为了帮助完成诸如家庭作业之类的小事。

但是,一个特定的方法给了我标题中提到的错误:

def get_simps(num)  
  curr = 2  
  print("Working...")  
  while (curr <= num)  
    #If they divide cleanly, then it's a simplified form  
    if (num % curr == 0)  
      res = [curr, num / curr]  
      break  
    end  
    curr += 1  
  end  
  print("\n")  
  return res    
end    

其中参数 num 由该语句提供:

print("Insert number here: ")  
num = gets().chomp().to_i()  

因此使错误变得奇怪:为什么它说我比较 Fixnum 和 ARRAY?我也这样做了:

if (num.class() == curr.class())  
 print "Cheese"  
end  

它打印出奶酪。那么为什么会出错呢?

【问题讨论】:

  • 复制粘贴到 IRB 并使用 get_simps(gets().chomp().to_i()) 调用不会给我一个错误(尽管它确实给出了错误的结果:get_simps(15000) => [2, 7500]
  • 您发布的代码对我来说很好用。你在做get_simps(get_simps(20))之类的事情吗?
  • 另外,“错误”,因为我希望它返回数字的素数分解。
  • @Tordek 实际上,这看起来像是一种检测素数的方法,它会返回因子以及除以该数的结果是什么,如果素数是nil
  • @new123456 完整的回溯,也许这个程序的目的在这里会有很大帮助。

标签: ruby numbers


【解决方案1】:

发布的代码看起来不应该给出描述的错误,除非你不小心给它一个数组。

您可能想查看 divmod() 函数,它可以在一定程度上清理内部循环。如果您的最小素因数很大,您将执行许多不必要的整数除法。

这不是您要寻找的答案,但可以找到一个特别优雅的 Ruby 素数解决方案 here

【讨论】:

  • 感谢您的建议。我从头开始重写了整个算法(crap-o-rithm),性能上看起来还不错。
猜你喜欢
  • 2014-02-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多