ユーザーからの入力を Big-Integer として取得し、それを For ループに操作したい
BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
System.out.println(i);
}
しかし、それはうまくいきません
どんな体でも私を助けることができますか?
ユーザーからの入力を Big-Integer として取得し、それを For ループに操作したい
BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
System.out.println(i);
}
しかし、それはうまくいきません
どんな体でも私を助けることができますか?
代わりに次の構文を使用します。
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
通常、この目的には十分です。
compareTo
イディオム_ドキュメントから:
<
このメソッドは、6 つのブール比較演算子 ( 、==
、>
、>=
、!=
)のそれぞれに対する個別のメソッドより優先して提供されます<=
。これらの比較を実行するための推奨イディオムは次のとおりです。( )。ここで、 は 6 つの比較演算子の 1 つです。x.compareTo(y)
<op>
0
<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
これは に固有のものではありませんBigInteger
。これは、一般的に適用されますComparable<T>
。
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);
まず、「i」という 2 つの変数があります。
次に、ユーザー入力はどこにありますか?
3 番目に、i=i+i は i をプリミティブ値にボックス化解除し、オーバーフローする可能性があり、結果を新しいオブジェクトにボックス化します (つまり、ステートメントがコンパイルされても、チェックしていません)。
第 4 に、i=i+i は i = i.multiply(BigInteger.valueof(2)) のように記述できます。
5 番目に、100000 <= 1 は false であるため、ループは実行されません。
I think this code should work
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);
}
}