#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 Рад помочь! Если мой ответ вам помог, вы можете принять его, нажав на большую галочку, чтобы выбрать его в качестве принятого ответа, чтобы люди, отвечающие, могли сосредоточиться на старых вопросах, на которые все еще нет ответов.