下面的代码要求输入两次数字。
public class Palindrome {
public static void main(String[] args) {
boolean x;
boolean display;
x = check();
display = display();
}
private static int getUserInput() {
int inputNumber = 0;
String answer = JOptionPane.showInputDialog(null, "Please enter a five digit number","Enter a number");
inputNumber = Integer.parseInt(answer);
return inputNumber;
}
private static boolean check(){
int inputNumber = getUserInput();
int number = inputNumber;
int[] myArray = new int[5];
for (int i = 0; i < myArray.length; i++) {
myArray[i] = (int) (number /(Math.pow(10,i)) % 10);
}
if(myArray[0] == myArray[4] && myArray[1] == myArray[3])
return true;
else
return false;
}
public static boolean display(){
if (check() == true) {
JOptionPane.showMessageDialog(null, "This number is a Palindrome",
"Excellent!",
JOptionPane.INFORMATION_MESSAGE);
} else
JOptionPane.showMessageDialog(null,
"Number is not a Palindrome!",
"Sorry",
JOptionPane.ERROR_MESSAGE);
return false;
}
}
我希望它只问一次。
由于
答案 0 :(得分:4)
这是因为您在顶层呼叫check()
(要求输入),但是您再次呼叫check()
作为display()
的一部分。因此,第一个输入被完全忽略(尝试它,只有第二个输入会影响消息)。你的调用树看起来像这样:
main()
|- check()
| |- getUserInput(...)
| | |- *(show input dialog)*
|
|-display()
| |- check()
| | |- getUserInput(...)
| | | |- *(show input dialog)*
| |
| |- (show message dialog)
我怀疑你的意思是将之前的执行结果作为变量传递给display()
,而不是再次调用该方法。这可能看起来像这样:
public static void main(String[] args) {
boolean x = check(); // No real need to declare the variable separately
boolean display = display(x);
}
...
public static boolean display(boolean check) {
if (check) { // P.S. no need to explicitly use the "== true"
...
} else
...
}
或者,您可以放弃check()
内main
的号码,而仅来自display
方法的号码。在我看来,将“接收输入”和“显示输出”方法作为两个独立的方法进行编程实践是更好的。同样处理输入的输出方法是非平凡系统中的噩梦。
答案 1 :(得分:2)
您的display()
方法第二次调用check()
。
答案 2 :(得分:1)
您已拨打check()
方法两次。每次都会显示输入对话框。
答案 3 :(得分:1)
您首先在主函数中调用check():
x = check();
然后再次显示功能
if(check() == true)
如果您只是从main调用display,那么您的代码应该没问题。