Почему сравнение с BigInteger во время цикла не завершается? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть этот метод, который застрял в цикле while, я печатаю логическое значение условия в самом методе, и в итоге он становится ложным, но он не выходит из цикла.

    public static boolean isPalindrome(BigInteger num) {
         BigInteger invertedNum = BigInteger.valueOf(0);
         BigInteger auxNum = num;

         while (auxNum.compareTo(BigInteger.valueOf(0)) != 0) {
             invertedNum = invertedNum.multiply(BigInteger.valueOf(10)).add(auxNum.divide(BigInteger.valueOf(10)));
             auxNum = auxNum.divide(BigInteger.valueOf(10));
             System.out.println(auxNum.compareTo(BigInteger.valueOf(0)) != 0);
    }

    return invertedNum == num;
}

1 Ответ

0 голосов
/ 07 сентября 2018

Я запустил ваш код, и он отлично работает; циклы while выходят.

Ваш код содержит 2 ошибки:

  • при вызове .add(auxNum.divide) я предполагаю, что вы хотите mod вместо этого.
  • вы не можете сравнить bigints с ==. Вы должны использовать .equals (в цикле while вы используете .compareTo, который работает нормально, но .equals более читабелен, так как он правильно выражает то, что вы пытаетесь достичь. Вы сравниваете с == на самый конец, в выражении return.

Применяя эти 2 исправления, ваш код правильно возвращает true для палиндромных (в десятичных) чисел и false в противном случае.

...