首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java:在BigInteger的情况下for循环是如何工作的

java:在BigInteger的情况下for循环是如何工作的
EN

Stack Overflow用户
提问于 2010-06-11 23:43:48
回答 4查看 41.9K关注 0票数 28

我想将来自用户的输入作为Big-Integer,并将其操作到一个For循环中

代码语言:javascript
复制
BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
    System.out.println(i);
}

但它不会起作用

有人能帮我吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-11 23:46:31

您可以改用以下语法:

代码语言:javascript
复制
BigInteger i = BigInteger.valueOf(100000L);  // long i = 100000L;
i.compareTo(BigInteger.ONE) > 0              // i > 1
i = i.subtract(BigInteger.ONE)               // i = i - 1

下面是一个将它们组合在一起的示例:

代码语言:javascript
复制
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 as循环索引是非常不典型的。long通常足以达到此目的。

API链接

java.math.BigInteger

The compareTo成语

从文档中:

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

换句话说,给定BigInteger x, y,下面是比较用法:

代码语言:javascript
复制
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

这不是特定于BigInteger;适用于任何Comparable一般来说。

关于不变性的注记

BigInteger,就像String,是一个不可变的对象。初学者往往会犯以下错误:

代码语言:javascript
复制
String s = "  hello  ";
s.trim(); // doesn't "work"!!!

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

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

代码语言:javascript
复制
s = s.trim();
bi = bi.add(BigInteger.ONE);
票数 54
EN

Stack Overflow用户

发布于 2010-06-11 23:59:49

首先,你有两个变量叫做"i“。

其次,用户输入在哪里?

第三,i=i+i将i解包成一个原始值,可能会使它溢出,并将结果装箱到一个新对象中(也就是说,如果语句被编译了,我还没有检查它)。

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

第五,循环永远不会运行,因为100000 <= 1为false。

票数 3
EN

Stack Overflow用户

发布于 2010-06-11 23:52:59

我认为这段代码应该可以工作

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3024186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档