This program runs without throwing any exceptions, but regardless of the input the result is always the same: ""blank" is a palindrome." Every single time the input is a palindrome I was just wondering if anyone had any advice as to why this is happening? Here is the code for the program:
class Palindrome
{
public static void main(String args[])
{
int num = 0;
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
int dig5 = 0;
boolean digits = true;
retrieveInput(num);
check(num,dig1,dig2,dig3,dig4,dig5);
display(digits,num);
}
public static int retrieveInput(int num)
{
String number;
number = JOptionPane.showInputDialog("Enter A Five Digit Number.");
num = Integer.parseInt(number);
while(num < 9999 || num > 99999)
{
JOptionPane.showMessageDialog(null, num + " Is Not A Five Digit Number",
"ERROR", JOptionPane.ERROR_MESSAGE);
number = JOptionPane.showInputDialog("Enter A Five Digit Number.");
num = Integer.parseInt(number);
}
return num;
}
public static boolean check(int num,int dig1,int dig2,int dig3,int dig4,int dig5)
{
boolean digits;
dig1 = num / 10000;
dig2 = num % 10000 / 1000;
dig3 = num % 10000 % 1000 / 100;
dig4 = num % 10000 % 1000 % 100 /10;
dig5 = num % 10000 % 1000 % 100 % 10 / 1;
if (dig1 == dig5 && dig2 == dig4)
digits = true;
else
digits = false;
return digits;
}
public static void display(boolean digits, int num)
{
num = retrieveInput(num);
if (digits = false)
JOptionPane.showMessageDialog(null, num + " is a palindrome");
else
JOptionPane.showMessageDialog(null, num + " is not a palindrome");
}
}
On the second line of display(boolean, int)
, you are attempting to compare a boolean with the =
operator. This sets digits
to false
I think you meant to say:
if (digits == false)
An if statement needs a boolean for input, i.e. if(bool)
. You don't need to check if this is true or false like if(bool == true)
because bool == true
always evaluates to equal bool
. Saying bool == true
is completely redundant. However, you bool == false
always evaluates to the opposite of bool
. The !
operator flips the value of the following boolean, e.g. !true
evaluates to false
. !bool
therefore always evaluates to the opposite of bool
, and is the same as bool == false
.
Therefore, you only need:
if (!digits)
It is also considered good practice to do it this way.
Another way to make your code even shorter is by using the ternary operator. This isn't necessarily the best thing to do, but I personally like doing it this way:
Replace
if (digits = false)
JOptionPane.showMessageDialog(null, num + " is a palindrome");
else
JOptionPane.showMessageDialog(null, num + " is not a palindrome");
with
JOptionPane.showMessageDialog(null, num + " is " + (digits ? "not " : "") + "a palindrome");
For more about the ternary operator, see these pages:
Another thing to note is that you don't need to process the input as an integer, because you never use the number in arithmetic statements; you only compare the digits of the number to each other. In this working code, I processed it as a string, so it is much shorter:
import javax.swing.*;
class Palindrome
{
public static void main(String args[])
{
display();
}
/**
* Returns a five-digit string
*/
public static String retrieveInput()
{
String number = JOptionPane.showInputDialog("Enter A Five Digit Number:"); //get input
while(number.length() != 5) //continue to get input while it is not five digits
{
JOptionPane.showMessageDialog(null, number + " Is Not A Five Digit Number",
"ERROR", JOptionPane.ERROR_MESSAGE);
number = JOptionPane.showInputDialog("Enter A Five Digit Number:");
}
return number; //return the input
}
/**
* Returns whether the given five digit string is a palindrome
*/
public static boolean check(String number)
{
return (number.charAt(0) == number.charAt(4) && number.charAt(1) == number.charAt(3)); //checks to see if the first character equals the fifth character and the second character equals the fourth character
}
public static void display()
{
String number = retrieveInput(); //gets input
if(check(number)) //if it is a palindrome
{
JOptionPane.showMessageDialog(null, number + " is a palindrome"); //say it is a palindrome
}
else
{
JOptionPane.showMessageDialog(null, number + " is not a palindrome"); //say it isn't a palindrome
}
}
}