28

ユーザーからの入力を Big-Integer として取得し、それを For ループに操作したい

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

しかし、それはうまくいきません

どんな体でも私を助けることができますか?

4

5 に答える 5

55

代わりに次の構文を使用します。

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イディオム_

ドキュメントから:

<このメソッドは、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);
于 2010-06-11T15:46:31.093 に答える
3

まず、「i」という 2 つの変数があります。

次に、ユーザー入力はどこにありますか?

3 番目に、i=i+i は i をプリミティブ値にボックス化解除し、オーバーフローする可能性があり、結果を新しいオブジェクトにボックス化します (つまり、ステートメントがコンパイルされても、チェックしていません)。

第 4 に、i=i+i は i = i.multiply(BigInteger.valueof(2)) のように記述できます。

5 番目に、100000 <= 1 は false であるため、ループは実行されません。

于 2010-06-11T15:59:48.580 に答える
1

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);
    }
}
于 2010-06-11T15:52:58.513 に答える