2014-09-04 68 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."); 
    } 
} 

這樣你的程序就會永遠循環,或者直到用戶輸入正確的輸入而不是崩潰。除非你正在實現一個遞歸算法,否則我想不出有任何方法可以自行調用。