java:在BigInteger的情况下如何进行循环工作

时间:2010-06-11 15:43:48

标签: java biginteger

我想将用户的输入作为Big-Integer并将其操作为For循环

BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
    System.out.println(i);
}

但它不起作用

任何人都可以帮助我。

4 个答案:

答案 0 :(得分:46)

您可以使用以下语法:

BigInteger i = BigInteger.valueOf(100000L);  // long i = 100000L;
i.compareTo(BigInteger.ONE) > 0              // i > 1
i = i.subtract(BigInteger.ONE)               // i = i - 1

所以这是一个把它放在一起的例子:

    for (BigInteger bi = BigInteger.valueOf(5);
            bi.compareTo(BigInteger.ZERO) > 0;
            bi = bi.subtract(BigInteger.ONE)) {

        System.out.println(bi);
    }
    // prints "5", "4", "3", "2", "1"

请注意,使用BigInteger作为循环索引非常不典型。 long通常足以达到此目的。

API链接


compareTo成语

来自文档:

  

此方法优先于六个布尔比较运算符(<==>>=!=中的每一个的单独方法提供,<=)。执行这些比较的建议习惯是:(x.compareTo(y) <op> 0),其中 {{ 1}} 是六个比较运算符之一。

换句话说,给定<op>,这些是比较习语:

BigInteger x, y

这不是x.compareTo(y) < 0 // x < y x.compareTo(y) <= 0 // x <= y x.compareTo(y) != 0 // x != y x.compareTo(y) == 0 // x == y x.compareTo(y) > 0 // x > y x.compareTo(y) >= 0 // x >= y 特有的;这一般适用于任何Comparable<T>


关于不变性的说明

BigInteger一样,

BigInteger是一个不可变对象。初学者倾向于犯下以下错误:

String

由于它们是不可变的,因此这些方法不会改变它们被调用的对象,而是返回新对象,即这些操作的结果。因此,正确的用法如下:

String s = "  hello  ";
s.trim(); // doesn't "work"!!!

BigInteger bi = BigInteger.valueOf(5);
bi.add(BigInteger.ONE); // doesn't "work"!!!

答案 1 :(得分:3)

嗯,首先,你有两个名为“i”的变量。

其次,用户输入在哪里?

第三,i = i + i将i解包成原始值,可能会溢出它,并将结果存入一个新对象(即,如果语句甚至编译,我还没有检查过。)

第四,i = i + i可以写成i = i.multiply(BigInteger.valueof(2))。

第五,循环永远不会运行,因为100000&lt; = 1是假的。

答案 2 :(得分:1)

我认为此代码应该有效

public static void main(String[] args) {
    BigInteger bigI = new BigInteger("10000000");
    BigInteger one = new BigInteger("1");

    for (; bigI.compareTo(one) == 0; bigI.subtract(one)) {
       bigI = bigI.add(one);
    }
}

答案 3 :(得分:1)

这可行

BigInteger i;
        for(i = BigInteger.valueOf(0);i.compareTo(new BigInteger("100000")) 
            <=0;i=i.add(BigInteger.ONE))
        {
            System.out.println(i);
        }

(或)

for(BigInteger i = BigInteger.valueOf(0);i.compareTo(new BigInteger("100000")) 
            <=0;i=i.add(BigInteger.ONE))
        {
            System.out.println(i);
        }

注意不要声明 BigInteger 两次。