【问题标题】:Is there a way using BigInteger for iteration?有没有办法使用 BigInteger 进行迭代?
【发布时间】:2011-01-26 06:30:35
【问题描述】:

BigInteger 是否只有equals 用于比较?
是否有像

现在我想知道,有没有办法在迭代中使用BigInteger,例如whilefor

【问题讨论】:

    标签: java math biginteger notation


    【解决方案1】:

    您可以使用compareTo 方法。

    【讨论】:

    • 谢谢!你真的真的帮了我
    【解决方案2】:

    你不能使用数学符号,事实上我也不会养成使用 == 的习惯,我很确定除非他们使用一些严重的诡计,否则它会失败。

    a = new BigInteger(500);
    
    b = a;
    if( a == b ) 
        will always be true
    
    b=new BigInteger(500);
    if( a == b )
        will never be true
    
    if( a.equals(b) )
        will always work fine.
    

    Java 对于这类东西来说并不是一种很好的语言——我真的很喜欢 Java,但最终在实现一个 Complex 类以及实现一个可以保存和操作复杂类的矩阵时遇到了很多麻烦。

    我的解决方案是使用 Java 创建核心类,然后使用 Groovy 创建使用核心类的类。如果您遵循某些命名模式,那么您可以在任何类上使用任何运算符。

    或者,如果您只想处理大数字,只需使用 groovy,甚至不为变量声明类型 - 它会自动将它们提升为您需要的任何类型。

    【讨论】:

    • BigInteger 只能保存整数,所以5.5 不起作用。你可能在想BigDecimal。即使是BigDecimal:使用the constructor that takes a double is almost always a bad idea!
    • 该死的,谢谢。没想到——我想使用一些奇怪的数字,因为我认为 Sun 实际上做了一个技巧,使 BigInt(1 到 10) 实际上通过某种黑魔法使用相同的引用。哦,好吧,会去修复。
    • 另外:请注意,Java 中没有任何黑魔法可以让new 返回除新对象之外的任何内容。所以你的第二张a==b 支票永远不会返回trueb.add(100); 也没有可见的效果,因为 add() 不会修改 BigInteger 实例(毕竟它是不可变的),而是将结果作为新对象返回。
    • 重用小型 BigInteger 实例的“黑魔法”适用于 BigIniteger.valueOf() 而不是 new BigInteger
    【解决方案3】:

    Java 运算符仅设计为仅对原始数据类型进行操作;他们不对班级采取行动。由于 BigInteger 是一个类,所以只能通过类方法进行算术比较和运算。

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2021-09-13
      相关资源
      最近更新 更多