Why my code for checking if a number is a palindrom won't work?

别等时光非礼了梦想. 提交于 2019-12-02 12:58:12

This is because the value of x is getting changed finally.Which is not the original number at the end of the program. SO take another variable just below x like: int y = x; And at the end while using "if" condition use this value of y for comparison rather than using x. It will run perfectly.

int x = scan.nextInt();

int y=x;

if (y == isPalindrome) Add new variable like this.

The problem with you solution is that you modify x in the while loop. Your final check of (x == isPalindrome) will always fail because you will only reach that statement when x is equal to zero.

You need to save the original x value in another variable and use that to check against isPalindrome.

The problem is that in the course of processing the value of x is being changed from what was originally input - it always ends up as 0.

So, you have to preserve the input value, like so:

Scanner scan = new Scanner(System.in);
int original = scan.nextInt();
int x = original;

and then use the original value for the final comparison, like so:

if (original == isPalindrome){

Here's how I'd do it: I'd use the libraries more and write a lot less code.

I'd recommend that you learn the Sun Java coding standards and develop a formatting style. Readability promotes understanding. Style and neatness matter.

package misc;

public class PalindromeChecker {
    public static void main(String args[]) {
        for (String arg : args) {
            System.out.println(String.format("arg '%s' is" + (isPalindrome(Integer.valueOf(arg)) ? "" : " not") + " a palindrome", arg));
        }
    }

    public static boolean isPalindrome(int value) {
        String s = Integer.toString(value);
        String reversed = new StringBuilder(s).reverse().toString();
        return reversed.equals(s);
    }
}

When you do the following operation on x:

x /= 10;

you're modifying its value - so it no longer contains the input from:

int x = scan.nextInt();

As Narendra Jadon suggested - you can save the original value into another variable and use it when you try to compare:

if (x == isPalindrome){

Alternative solution that uses "conversion" of the int to String:

public boolean isPalindrom(int n) {
    return new StringBuilder("" + n).reverse().toString().equals("" + n);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!