簡體   English   中英

為什么這種方法存在邏輯錯誤。 isPalindrome(11) 應該返回 true,但它返回 false

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM