我想将来自用户的输入作为Big-Integer,并将其操作到一个For循环中
BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
System.out.println(i);
}
但它不会起作用
有人能帮我吗?
发布于 2010-06-11 23:46:31
您可以改用以下语法:
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 as循环索引是非常不典型的。long通常足以达到此目的。
API链接
int compareTo(BigInteger val)
来自interface Comparable
BigInteger subtract(BigInteger val)
BigInteger add(BigInteger val)
static BigInteger valueOf(long val)
The compareTo
成语
从文档中:
此方法优先于为六个布尔比较运算符中的每一个提供单独的方法(<
, ==
, >
, >=
, !=
, <=
)。执行这些比较的建议习惯用法是:(x.compareTo(y)0),其中是六个比较运算符之一。
换句话说,给定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
这不是特定于BigInteger;适用于任何Comparable
一般来说。
关于不变性的注记
BigInteger,就像String,是一个不可变的对象。初学者往往会犯以下错误:
String s = " hello ";
s.trim(); // doesn't "work"!!!
BigInteger bi = BigInteger.valueOf(5);
bi.add(BigInteger.ONE); // doesn't "work"!!!
因为它们是不可变的,所以这些方法不会改变它们被调用的对象,而是返回新的对象,即这些操作的结果。因此,正确的用法如下:
s = s.trim();
bi = bi.add(BigInteger.ONE);
发布于 2010-06-11 23:59:49
首先,你有两个变量叫做"i“。
其次,用户输入在哪里?
第三,i=i+i将i解包成一个原始值,可能会使它溢出,并将结果装箱到一个新对象中(也就是说,如果语句被编译了,我还没有检查它)。
第四,i=i+i可以写为i= i.multiply(BigInteger.valueof(2))。
第五,循环永远不会运行,因为100000 <= 1为false。
发布于 2010-06-11 23:52:59
我认为这段代码应该可以工作
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);
}
}
https://stackoverflow.com/questions/3024186
复制相似问题