为什么这个方法有逻辑错误ispalindrome(11)应该返回true,但返回false

gijlo24d  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(374)
public static boolean isPalindrome(int number) {

    int reverseNumber = 0;
    int lastDigit = 0;

    if (number < 0) {
        number = number * -1;
    }

    while (number > 0) {
        lastDigit = number % 10;
        number = number / 10;
        if (number == 0) {
            reverseNumber += lastDigit;
        }
        else {
        reverseNumber += lastDigit;
        reverseNumber *= 10;
        }
    }
    return reverseNumber == number;
}

这个方法应该返回真正的回文,但是它没有。

mnowg1ta

mnowg1ta1#

输出错误,因为您使用了变量 number 在整个过程中。所以 number=11 每次都会减少,最后与 reverseNumber ,这是比较 11 == 0 . 所以输出是假的。分配变量 temp 比如, int temp = number .

public static boolean isPalindrome(int number) {

int temp = number;
int reverseNumber = 0;
int lastDigit = 0;

if (number < 0) {
    number = number * -1;
}

while (number > 0) {
    lastDigit = number % 10;     
    number = number / 10;
    reverseNumber = (reverseNumber * 10) + lastDigit ;
}
return reverseNumber == temp;

}

1mrurvl1

1mrurvl12#

你在“破坏”原作 number 施工时 reverseNumber :

number = number / 10;

所以在那之后 while -循环,你的 number 是零,比较 reverseNumber == number 不像你想象的那样。总是这样 false 除非你的倒数是零。
可以使用新的局部变量来构建 reverseNumber ,在循环中对其进行修改,但仍使用原始 number 对于最终比较:

public static boolean isPalindrome(int number) {

   // ... Handle negatives

   int tempNumber = number; 

   while (tempNumber > 0) {
       // ...
       tempNumber = tempNumber / 10;
       // ...
   }

   return reverseNumber == number;
}

相关问题