Why my code for checking if a number is a palindro

2020-05-09 23:37发布

My Java code is here:

import java.util.Scanner;
public class task2 {
    public static void main(String args[])  {
        System.out.print("Input a 3 digit int");

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

        int isPalindrome = 0; 

        while (x != 0)
        {
            isPalindrome = isPalindrome*10 + x % 10;
            x /= 10;
        }

        {
            if (x == isPalindrome){
                System.out.print ("Yes, this is a palindrome!");
            }
            else {
                System.out.print("No, try again");
            }
        }
    }
}

The code will only recognize a palindrome if the numbers entered are zeroes. I'm having trouble understanding why.

5条回答
我只想做你的唯一
2楼-- · 2020-05-10 00:03

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);
    }
}
查看更多
唯我独甜
3楼-- · 2020-05-10 00:05

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){
查看更多
Lonely孤独者°
4楼-- · 2020-05-10 00:07

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.

查看更多
戒情不戒烟
5楼-- · 2020-05-10 00:08

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.

查看更多
倾城 Initia
6楼-- · 2020-05-10 00:10

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);
}
查看更多
登录 后发表回答