java: как работает цикл в случае BigInteger



Я хочу взять ввод от пользователя в виде большого целого числа и манипулировать им в цикле For



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


Но это не сработает



Может ли мне помочь любое тело.

577   3  

3 ответов:

Вместо этого вы используете следующий синтаксис:

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 links


The compareTo фразеологизм

Из документации:

Этот метод предпочтительнее индивидуальных методов для каждого из шести булевых операторов сравнения.(<, ==, >, >=, !=, <=). Предлагаемая идиома для выполнения этих сравнений:: (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".

Во-вторых, где пользовательский ввод?

В-третьих, i=i+i распаковывает i в примитивное значение, возможно, переполняя его, и помещает результат в новый объект (то есть, если оператор даже компилируется, что я не проверял).

В-четвертых, i=i+i можно записать как i = i. умножить (BigInteger.valueof (2)).

В-пятых, цикл никогда не выполняется, потому что 100000

Я думаю, что этот код должен работать

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);
    }
}

Comments

    Ничего не найдено.