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