2015-02-24 36 views
0

到目前爲止我已經得到這個,即時嘗試在java中使用命令行。我想在輸入不是int時打印一個錯誤。如何輸入不是int時打印錯誤

private static void add(String[] args) { 
    if (args.length == 1) { 
    System.out.print("Error: Argument count mismatch"); 
    } 
    int num = 0; 
    for (int i = 1;i < args.length;i++) { 
    if (isInteger(args[i]) == false) { 
     System.out.print("Error: Argument type mismatch"); 
    } 
    int a = Integer.parseInt(args[i]); 
    num += a; 
    } 
    System.out.println(num); 
} 

第二if語句是我要打印錯誤的部分,如果輸入不是int,我有一個isInteger方法。但是,我的程序崩潰,或打印錯誤。

編輯:這是我的isInteger方法

public static boolean isInteger(String s) { 
    try { 
    Integer.parseInt(s); 
    } catch(NumberFormatException e) { 
    return false; 
    } 
    return true; 
} 

所以不應該是一個問題在這裏。

EDIT2:這裏是我得到

java.lang.NumberFormatException: For input string: "a" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at MyCLIParser.add(MyCLIParser.java:46) 
    at MyCLIParser.main(MyCLIParser.java:10) 
+1

你的isInteger()是什麼樣子?你在日誌中遇到的錯誤是什麼? – ChrisStillwell 2015-02-24 21:05:53

+1

正如@ChrisS所說,提供你的錯誤的堆棧跟蹤,並且還試圖包含你的isInteger方法 – Tarik 2015-02-24 21:07:40

+0

在那裏添加了我的isInteger方法。它只是崩潰,後面會提示錯誤代碼 – Schuld 2015-02-24 21:28:33

回答

0

這是正常的,可以說你有args [i]等於「someString」,那麼當你打電話給你時isInteger()函數會返回false。然後,當你說isInteger(args[i]) == false 這意味着false == false這是true。並且System.out.print("Error: Argument type mismatch");將正確執行。

之後,當您撥打int a = Integer.parseInt(args[i]);而沒有捕捉到NumberFormatException這是正常的,您的應用程序崩潰與該異常錯誤。

來處理,你可以添加一個else塊一樣建議在Khanna111的答案,這樣的:

private static void add(String[] args) { 
    if (args.length == 1) { 
    System.out.print("Error: Argument count mismatch"); 
    } 
    int num = 0; 
    for (int i = 1;i < args.length;i++) { 
    if (isInteger(args[i]) == false) { 
     System.out.print("Error: Argument type mismatch"); 
    } 
    else { 
    int a = Integer.parseInt(args[i]); 
    num += a; 
    } 
    } 
    System.out.println(num); 
} 

或者你可以使用一個continue,允許執行跳轉到下一個元素在for循環和繼續(更新,感謝湯姆的評論):

private static void add(String[] args) { 
    if (args.length == 1) { 
    System.out.print("Error: Argument count mismatch"); 
    } 
    int num = 0; 
    for (int i = 1;i < args.length;i++) { 
    if (isInteger(args[i]) == false) { 
     System.out.print("Error: Argument type mismatch"); 
     continue; 
    } 
    int a = Integer.parseInt(args[i]); 
    num += a; 
    } 
    System.out.println(num); 
} 
+1

@Tom是的,因爲我現在旅行,所以我一直在想,謝謝你的建議 – Tarik 2015-02-24 22:18:44

2

歡迎堆棧溢出錯誤。該問題可以從堆棧跟蹤中讀取。這就是你所擁有的。

if (isInteger(args[i]) == false) { 
     System.out.print("Error: Argument type mismatch"); 
    } 
int a = Integer.parseInt(args[i]); 

注意,沒有「else」後的「if」這樣的「a」的值被試圖重新計算,即使ARGS [i]是不是一個整數。

我希望你能想出如何用這個提示來解決這個問題。