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

后端 未结 5 1647
逝去的感伤
逝去的感伤 2021-01-29 06:28

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         


        
相关标签:
5条回答
  • 2021-01-29 07:04

    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);
    }
    
    0 讨论(0)
  • 2021-01-29 07:08

    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);
        }
    }
    
    0 讨论(0)
  • 2021-01-29 07:12

    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){
    
    0 讨论(0)
  • 2021-01-29 07:22

    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.

    0 讨论(0)
  • 2021-01-29 07:23

    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.

    0 讨论(0)
提交回复
热议问题