Я хочу взять Input от пользователя как Big-Integer и обработать его в цикле For
BigInteger i;
for(BigInteger i=0; i<=100000; i++) {
System.out.println(i);
}
Но это не сработает
Может ли кто-нибудь помочь мне.
Я хочу взять Input от пользователя как 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
Из документации:
Этот метод предоставляется в предпочтении индивидуальным методам для каждого из шести булевых операторов сравнения (
<
,==
,>
,>=
,!=
,<=
). Предложенная идиома для выполнения этих сравнений: (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.multiply(BigInteger.valueof(2)).
В-пятых, цикл никогда не запускается, потому что 100000 <= 1 является ложным.
Я думаю, что этот код должен работать
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);
}
}