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.
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.
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:
and then use the original value for the final comparison, like so:
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.
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.
When you do the following operation on
x
:you're modifying its value - so it no longer contains the input from:
As Narendra Jadon suggested - you can save the original value into another variable and use it when you try to compare:
Alternative solution that uses "conversion" of the int to String: