如果输入正确的值(int值),此程序可以正常工作。但是,当我输入一个字符或任何其他错误的值时,它会显示错误的输入消息并再次调用main方法。唯一的问题是在调用main方法并输入正确的输入后,它会输出额外的数据,为什么会这样?
import javax.swing.JOptionPane;
public class TestPolyVal {
public static void main(String[] args){
int xValue = 0;
String value = JOptionPane.showInputDialog(null, "What is the value of X");
try{
xValue = Integer.parseInt(value);}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");
TestPolyVal.main(args);
}
int[] intArray = new int[20] ;
for (int i = 0; i < 20; i ++){
intArray[i] = 2;}
System.out.println(calculateBruteForce(intArray,xValue));
System.out.println("0");
System.out.println(calculateHorner(intArray,xValue));}
static int calculateBruteForce(int[] a, int b){
int sum = 0 ;
for (int i = 0; i < 20; i ++){
sum +=a[i]*powerCalc(b,i);}
return sum;}
static int powerCalc(int c, int d){
int powerValue = c;
if (d==0){
powerValue = 1;}
else if (d==1){
powerValue = c;}
else if (d>1){
for (int i = 1; i<d;i++){
powerValue = powerValue*c;}}
return powerValue;}
static int calculateHorner(int[] e, int f){
int acc = e[e.length-1];
for(int i = e.length-2; i >= 0; i--){
acc = (acc * f)+ e[i];}
return acc;}
}
答案 0 :(得分:0)
您正在获得额外的打印输出,因为第一次main
执行将在第二次main
调用完成后继续执行。
这可以通过在return;
的新来电后添加main
来解决:
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");
TestPolyVal.main(args);
return;
}
答案 1 :(得分:0)
在main()中调用main()的方法在这种情况下不是一个很好的方法。作为对抗用户,我可以一遍又一遍地在对话框中输入“a”。最终这会导致堆栈溢出错误,您的程序将崩溃。
我建议使用循环。
while(true) {
try{
xValue = Integer.parseInt(value);
break;
}
catch (NumberFormatException e){
JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values.");
}
}
这样你的程序就会永远循环或直到用户输入正确的输入而不是崩溃。除非您正在实现递归算法,否则我无法想出方法调用自身的任何原因。