2016-03-09 158 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

相关问题