2016-03-09 206 views
2

我試圖將我的StringArrayList轉換爲DoubleArrayList,由於某些原因它不能正確轉換。將字符串ArrayList轉換爲雙ArrayList

我的輸入:

1 2 3 4 

我的輸出:

[1.0] 
[1.0, 1.0, 2.0] 
[1.0, 1.0, 2.0, 1.0, 2.0, 3.0] 
[1.0, 1.0, 2.0, 1.0, 2.0, 3.0, 1.0, 2.0, 3.0, 4.0] 

預期輸出:

[1.0] [1.0, 2.0] [1.0, 2.0, 3.0] [1.0, 2.0, 3.0, 4.0] 

我的代碼

String inputValue; 


List<String> input = new ArrayList<String>(); 
List<Double> numbers = new ArrayList<Double>(); 



while((inputValue = stdin.readLine()) != null) { 

    input.add(inputValue); 

    for(int i = 0; i < input.size(); i++) { 
     numbers.add (Double.parseDouble(input.get(i))); 
    } 
    System.out.println(numbers); 
} 
+0

我的輸入: 我的輸出: [1.0] [1.0,1.0,2.0] [1.0,1.0,2.0,1.0,2.0,3.0] [1.0,1.0,2.0,1.0,2.0,3.0,1.0,2.0,3.0,4.0] 預期輸出: [1.0] [1.0,2.0] [1.0,2.0,3.0] [1.0,2.0 ,3.0,4.0] – swaguire

+1

這個評論應該在問題本身,所以我們可以看到它更快,直接... –

+0

我知道,但由於某種原因,每次我有它的網站認爲它的代碼 – swaguire

回答

4

您不需要兩個循環 - 當您從stdin讀取輸入時,可以將String轉換爲double。在那旁邊,輸出應該完成的循環後進行打印,一旦所有的數字都在名單:

while((inputValue = stdin.readLine()) != null){ 
     input.add(inputValue); 
     numbers.add (Double.parseDouble(inputValue)); 
    } 
    System.out.println(numbers); 

其實,我不知道,你甚至不需要input列表。

編輯:

如果您想要打印的輸入,因爲它被添加到列表,並處理錯誤的輸入,以及允許用戶通過鍵入輸入(即一個空行)退出循環:

while((inputValue = stdin.readLine()) != null && !inputValue.isEmpty()) { 
     input.add(inputValue); 
     try { 
      numbers.add (Double.parseDouble(inputValue)); 
      System.out.println(numbers); 
     } 
     catch (NumberFormatException numEx) { 
      System.out.println(inputValue + " is not a double"); 
     } 
    } 
+0

是的,但我需要它打印,所以我知道數字進入,即使我輸入null或什麼都沒有循環不停止 – swaguire

+0

@swaguire在這種情況下,你只需要包裝用try catch塊調用'parseDouble'來捕獲NumberFormatException。 – Eran

+0

我該如何做到這一點,並感謝所有的幫助到目前爲止 – swaguire

相關問題