2013-05-27 55 views
0

我在編寫應用程序時遇到困難,以區分用戶的args []輸入是字符串還是int。如果鍵入了一個int值,它將以常見的添加格式列出並添加。如果將一個字符串值輸入到args []中,則會收集忽略參數的列表(忽略了Strin []),並將打印供用戶查看。我試圖通過嵌套循環來區分這種情況,這些循環解析了作爲int值輸入的值,並檢查這個args []字符串值是否確實是一個整數,但是在編程方面相當新穎,我碰到了很多障礙。有什麼建議麼?Integer.parseInt混淆

這裏是我的代碼:

public class Addition { 


    public static void main(String args[]) { 
    int sum = 0; 
    String[] ignored = new String[args.length]; 
    if(args.length == 0) { 
     System.out.println("No input values!"); 
    } else { 
     for(int i = 0; i < args.length; i++) { 
     if(Character.isDigit(Integer.parseInt(args[i]))) { 
      sum += Integer.parseInt(args[i]); 
      if(i == 0) { 
      System.out.print(args[i]); 
      } else if(Integer.parseInt(args[i]) >= 0) { 
      System.out.print(" + " + args[i]); 
      } else if(Integer.parseInt(args[i]) < 0) { 
      System.out.print(" - " + (Integer.parseInt(args[i]) * -1)); 
      } 
     } else if(!Character.isDigit(Integer.parseInt(args[i]))) { 
      ignored[i] = args[i]; 
     } 
     } System.out.print(" = " + sum); 
    } 
    } 
} 

我得到這個相互作用錯誤:

java.lang.NumberFormatException: For input string: "-" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at Addition.main(Addition.java:17) 
+1

即使您的代碼確實工作,在int上調用Character方法也沒有多大意義。 –

+0

除非int是一個char的Unicode表示形式,而你不是。首先找出你的邏輯,然後寫出代碼。 –

+0

我想讓應用程序區分用戶放入的值是String還是int值。任何實際的建議或解釋爲什麼它沒有意義? – Saffioti

回答

1

好了,你可以一)確定它是一個數字,然後分析它,或B)嘗試解析,並且如果它失敗,則優雅地處理它。既然你總結的東西,我假設他們應該是一個數字,讓我們一起去B.

東西這麼簡單,你的情況會工作:

int badArgs = 0; 
for(int i = 0; i < args.length; i++) { 

    try { 
    int value = Integer.parseInt(args[i]); 
    // Do your main logic with value here 
    } catch (NumberFormatException e) { 
    ignored[badArgs++] = args[i]; 
    } 

目前存在的問題與你的代碼:像你一樣檢查.isDigit是沒有意義的 - 它是用來檢查字符串中的字符的 - 你已經在那個時候解析過它,所以如果它要拋出一個NumberFormatException異常,它會在你完成之前檢查。其次:檢查數字是否無用,因爲-1是一個有效的數字,但顯然會在你想到的任何檢查時失敗 - 而你的代碼的其餘部分表明你打算處理負面情況。

+0

感謝您的建設性意見。這真的有助於理解我的代碼的錯誤。 – Saffioti

4

好吧我不是很清楚你想用你的號碼做什麼,但你實際上可以使用NumberFormatException來實現你必須做的事情(分開數字和非數字)。

ArrayList<Integer> numbers = new ArrayList<Integer>(); 
ArrayList<String> nonNumbers = new ArrayList<String>(); 

for(String s : args) 
{ 
    try 
    { 
     int number = Integer.parseInt(s); 
     numbers.add(number); 
    } 
    catch (NumberFormatException nfe) 
    { 
     nonNumbers.add(s); 
    } 
} 

// rest of your code can use numbers and nonNumbers lists