Может ли кто-нибудь помочь мне понять, почему этот цикл while не будет работать для проблемы с литкодом «Номер палиндрома»?

#java

Вопрос:

 class Solution {
    public boolean isPalindrome(int x) {
        
        int reverse = 0;            
        int num;
        
        while (x!=0){
            
            num = x % 10;
            
            x /= 10;
            
            reverse = (reverse * 10)   num; 
            
        }
        
        if (reverse == x){                
            return true;
        }   
        else if (x < 0){
            return false;            
        }
        else if (reverse != x){
            return false;            
    }
}
 

Я знаю, что решение состоит в том, чтобы иметь while(x > обратный), но я не знаю, почему это работает, а мое-нет.

Комментарии:

1. Вы должны добавить else предложение с оператором return внутри него (или просто оператором return в конце метода). Без этого код не будет компилироваться.

2. Вы имеете в виду добавить оператор else в цикл while?

3. Нет, после последнего else if .

4. Я пытался, но это все равно не сработало. Я больше не получаю ошибку компилятора, но она возвращает значение false, когда ожидается значение true

5. Для каких входных данных он выдает ложь? Есть ли какие-либо входные данные, которые дают правильный результат?

Ответ №1:

Причина в том, что вы изменяете x параметр , и, следовательно, при сравнении reverse == x x будет 0 и reverse обратное число (т. Е. Всегда ложно, если только ввод не равен 0). Вы можете сделать что-то подобное:

 class Solution {
    public static boolean isPalindrome(int x) {
        // Create a new variable to modify instead of x
        int n = x;
        int reverse = 0;            
        int num;
        
        while (n!=0) {
            num = n % 10;
            n /= 10;
            reverse = (reverse * 10)   num;
        }
        
        if (reverse == x) return true;
        if (x < 0) return false;
        if (reverse != x) return false;
        return false;
    }
     
    public static void main(String[] args) {
        System.out.println(isPalindrome(12));    // false
        System.out.println(isPalindrome(121));   // true
        System.out.println(isPalindrome(1111));  // true
    }
}
 

Комментарии:

1. @PostChalone Рад помочь! Если мой ответ вам помог, вы можете принять его, нажав на большую галочку, чтобы выбрать его в качестве принятого ответа, чтобы люди, отвечающие, могли сосредоточиться на старых вопросах, на которые все еще нет ответов.