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

gijlo24d  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(422)
  1. public static boolean isPalindrome(int number) {
  2. int reverseNumber = 0;
  3. int lastDigit = 0;
  4. if (number < 0) {
  5. number = number * -1;
  6. }
  7. while (number > 0) {
  8. lastDigit = number % 10;
  9. number = number / 10;
  10. if (number == 0) {
  11. reverseNumber += lastDigit;
  12. }
  13. else {
  14. reverseNumber += lastDigit;
  15. reverseNumber *= 10;
  16. }
  17. }
  18. return reverseNumber == number;
  19. }

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

mnowg1ta

mnowg1ta1#

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

  1. public static boolean isPalindrome(int number) {
  2. int temp = number;
  3. int reverseNumber = 0;
  4. int lastDigit = 0;
  5. if (number < 0) {
  6. number = number * -1;
  7. }
  8. while (number > 0) {
  9. lastDigit = number % 10;
  10. number = number / 10;
  11. reverseNumber = (reverseNumber * 10) + lastDigit ;
  12. }
  13. return reverseNumber == temp;

}

展开查看全部
1mrurvl1

1mrurvl12#

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

  1. number = number / 10;

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

  1. public static boolean isPalindrome(int number) {
  2. // ... Handle negatives
  3. int tempNumber = number;
  4. while (tempNumber > 0) {
  5. // ...
  6. tempNumber = tempNumber / 10;
  7. // ...
  8. }
  9. return reverseNumber == number;
  10. }
展开查看全部

相关问题