您的代码有几个缺陷:
/* The goal of this method is to receive user input and return the
* entered value. For this you don't need the num input parameter.
*/
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;
}
/* Check takes a number and returns if the number is a palindrome or not.
* The digits of the number are calculated within the method and thus
* shouldn't be parameters. (You didn't use these anyway)
*/
public static boolean check(int num,int dig1,int dig2,int dig3,int dig4,int dig5)
{
boolean digits;
/* If you removed the paremeters, you've to declare the variables here,
* e.g. int dig1 = num / 10000
*/
dig1 = num / 10000;
dig2 = num % 10000 / 1000;
dig3 = num % 10000 % 1000 / 100; // This is not needed, because it's not used anywhere
dig4 = num % 10000 % 1000 % 100 /10;
dig5 = num % 10000 % 1000 % 100 % 10 / 1;
/* The pattern you used here is basically
* if cond == true then return true else return false
* You never have to use this pattern, since you can
* directly return conditions
*/
if (dig1 == dig5 && dig2 == dig4)
digits = true;
else
digits = false;
return digits;
}
/*
* This method displays a popup to the user that states if a given number
* is a palindrome or not. It expects the result and the number as paremeters.
*/
public static void display(boolean digits, int num)
{
/* You are (again) retrieving the input here, although the input
* is passed to this method.
*/
num = retrieveInput(num);
/* As The Guy with The Hat pointed out in his answer,
* = is the assignment operator. For comparisons you have to use
* == instead.
*/
if (digits = false)
JOptionPane.showMessageDialog(null, num + " is a palindrome");
else
JOptionPane.showMessageDialog(null, num + " is not a palindrome");
}
/*
* Here is the general control flow of your program
*/
public static void main(String args[])
{
// These variable declarations can be removed, since you aren't using,
// nor need them.
int num = 0;
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
int dig5 = 0;
boolean digits = true;
retrieveInput(num); // you are retrieving the input, but not storing it
check(num,dig1,dig2,dig3,dig4,dig5); // you are checking, but not storing the result
display(digits,num);
}
修正版本:
public static void main(String args[]) {
int num = retrieveInput();
boolean isPal = check(num);
display(num, isPal);
}
public static int retrieveInput() {
String number = JOptionPane
.showInputDialog("Enter A Five Digit Number.");
int 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.");
}
return num;
}
public static boolean check(int num) {
int dig1 = num / 10000;
int dig2 = num % 10000 / 1000;
// int dig3 = num % 10000 % 1000 / 100;
int dig4 = num % 10000 % 1000 % 100 / 10;
int dig5 = num % 10000 % 1000 % 100 % 10 / 1;
return dig1 == dig5 && dig2 == dig4
}
public static void display(int num, boolean isPal) {
if (isPal)
JOptionPane.showMessageDialog(null, num + " is a palindrome");
else
JOptionPane.showMessageDialog(null, num + " is not a palindrome");
}
请注意,我基本上没有改变您程序的核心。作为下一步,您可能需要检查用户是否输入了非数字字符或允许n长度的数字。