为什么在循环退出时没有compareTo BigInteger?

时间:2018-09-07 17:20:57

标签: java while-loop biginteger

我有一个困在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 :(得分:3)

我运行了您的代码,它运行正常; while循环退出。

您的代码中确实有2个错误:

  • .add(auxNum.divide)通话中,我假设您希望使用mod
  • 您不能将bigints与==进行比较。您必须使用.equals(在while循环中,您可以使用.compareTo正常工作,但是.equals更具可读性,因为它可以正确表达您要完成的工作。最后在return语句中与==进行比较。

应用这两个修复程序,您的代码对于回文(十进制)数字正确返回true,否则返回false。