调用main方法后的额外值

时间:2014-09-04 19:28:37

标签: java methods output main

如果输入正确的值(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;}

}

2 个答案:

答案 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.");
    }
}

这样你的程序就会永远循环或直到用户输入正确的输入而不是崩溃。除非您正在实现递归算法,否则我无法想出方法调用自身的任何原因。