Проблемы с java.math.BigInteger

У меня есть следующий код во главе метода:

BigInteger foo = BigInteger.valueOf(0);
BigInteger triNum = BigInteger.valueOf(0);

//set min value to 1*2*3*4*5*...*199*200.
BigInteger min = BigInteger.ONE;
BigInteger temp = BigInteger.ZERO;
for(int i=1; i<=200; i++)
{
    temp = BigInteger.valueOf(i);
    min = min.multiply(temp);
}
System.out.println(min);

while(triNum.compareTo(min) <= 0)
{
    foo.add(BigInteger.ONE);
    triNum = triNum.add(foo);
    System.out.println("triNum: "+triNum);
}

Предполагается, что для загрузки значения min требуется значение (1 * 2 * 3 * ... * 199 * 200), а затем для triNum устанавливается значение первого * номера треугольника ** со значением, превышающим min.

Проблема в том, что, когда я запускаю метод, все, что я получаю, это окно терминала со списком "triNum: 0", когда-либо прокручивающим экран... Я ничего не вижу в своем коде (хотя вполне возможно, что я сделал какая-то ошибка, и я немного незнаком с математикой (BigInteger), и это, кажется, указывает на класс BigInteger. Кто-нибудь видит ошибку в моем коде?

..........................................................................................................................

* Номер треугольника - это число, которое может быть достигнуто следующим образом: 1+2+3+4+5+6+7+...

3 ответа

Решение

Смотреть на

foo.add(BigInteger.ONE);

Это обновление foo? Или это создает объект, который равен foo+ BigInteger.ONE который не используется снова?

foo всегда 0. Вам нужно изменить эту строку:

foo.add(BigInteger.ONE);

к этому:

foo = foo.add(BigInteger.ONE);
 foo.add(BigInteger.ONE);

Так как BigIntegers неизменны, вам нужно снова присвоить результат foo:

 foo = foo.add(BigInteger.ONE);
Другие вопросы по тегам