2014-09-04 67 views
0

如果我输入正确的值(int值),该程序工作正常。但是,当我输入字符或任何其他错误的值时,它会显示错误的输入消息并再次调用main方法。唯一的问题是在调用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

你得到额外的打印输出,因为第二main调用完成后的第一个main将继续执行。

这可以通过固定在新的呼叫后加入return;main

catch (NumberFormatException e){ 
    JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values."); 
    TestPolyVal.main(args); 
    return; 
} 
+0

你能告诉我它返回什么吗? – user3443390 2014-09-04 19:33:24

+0

这是一个无效的方法,所以当我返回它返回没有正确的? – user3443390 2014-09-04 19:34:18

+0

没错。由于它的类型是'void',所以你不要在'return'中使用任何值。它会返回到调用方法的地方。如果是程序的开始,程序将终止。 – Keppil 2014-09-04 19:38:20

0

调用main()从内主要的方法()是不是在这种情况下,一个伟大的方法。作为一个对抗性的用户,我可以一次又一次地在对话框中输入'a'。最终这会导致堆栈溢出错误,您的程序将崩溃。

我会建议使用循环。

while(true) { 
    try{ 
     xValue = Integer.parseInt(value); 
     break; 
    } 
    catch (NumberFormatException e){ 
     JOptionPane.showMessageDialog(null,"Wrong input. Please input only integer values."); 
    } 
} 

这样你的程序就会永远循环,或者直到用户输入正确的输入而不是崩溃。除非你正在实现一个递归算法,否则我想不出有任何方法可以自行调用。

相关问题