首页 > 解决方案 > 为什么此方法存在逻辑错误。isPalindrome(11) 应该返回 true,但它返回 false

问题描述

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;
}

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

标签: javamethodsbooleanpalindrome

解决方案


number您在构建时正在“破坏”原件reverseNumber

number = number / 10;

因此,在while-loop 之后,您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;
}

推荐阅读