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

不打扰是莪最后的温柔 提交于 2019-12-04 07:00:01

问题


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.


回答1:


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.




回答2:


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.




回答3:


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){



回答4:


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);
    }
}



回答5:


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);
}


来源:https://stackoverflow.com/questions/25776844/why-my-code-for-checking-if-a-number-is-a-palindrom-wont-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!