[英]Why there is a logic error with this method. isPalindrome(11) should return true, but it returns 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;
}
這個方法應該返回真正的回文,但它沒有。
您在構造reverseNumber
“破壞”了原始number
:
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;
}
輸出是錯誤的,因為您已經為所有過程采用了變量number
。 因此,在每次和最后與reverseNumber
比較時, number=11
都會減少,它比較為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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.