2014-02-19 29 views
-1

这是一项家庭作业。这是为什么这个循环加倍我的ArrayList的大小?

我提示用户输入任意数量的数字,然后输入一个单词。因为我不知道将要输入的数字的数量,我将它们存储在一个String []中,然后将它们移动到一个ArrayList。
我通过在空格处分割扫描仪输入,将输入正确地存储到String []中。

现在我试图为String []的内容有以下添加到一个ArrayList:

int i = 0; 

    for (i = 0; i < inputToStringArray.length; i++) { 
     if(values.add(Double.parseDouble(inputToStringArray[i]))){ //if you can parse a double, parse a double 
      values.add(Double.parseDouble(inputToStringArray[i])); 
     } 
    } 

因为我不想在输入结束的话,我解析字符串[]为双打。
问题是,ArrayList复制每个数字,连续存储两次。
1,2.2,3.3的输入将存储为1.0,1.0,2.2,2.2,3.3,3.3。

为什么?

+2

因为这是你把你的代码。你有'values.add' **两次**。 –

+0

“我的代码没有错误,它的运行方式和我写的一样” – SnakeDoc

回答

6

基本上,如果List#add回报true,你重新加入...

if(values.add(Double.parseDouble(inputToStringArray[i]))){ //if you can parse a double, parse a double 
    values.add(Double.parseDouble(inputToStringArray[i])); 
} 

这基本上是说......

if add(value) { 
    add(value) // again... 
} 

喜欢的东西...

for (i = 0; i < inputToStringArray.length; i++) { 
    try { 
     values.add(Double.parseDouble(inputToStringArray[i])); 
    } catch (NumberFormatException exp) { 
     System.err.println(inputToStringArray[i] + " is not a valid double"); 
    } 
} 

可能会更好...

+2

List.add * always *返回true。 –

+0

我看到我的错误。非常感谢你!将在我的重点引用这个答案。 –

+0

@DavidEhrmann我正在讨论更多关于if语句的状态,然后是List的需求和这个上下文,你的评论是真实的,但是如果List实现是未知的,那么它有可能返回false由于某种原因'List'实现不能添加元素......只是说... – MadProgrammer

1

因为你添加了两次!您的If语句试图将其添加到values,如果成功,您将再次添加它。

尝试这样:

int i = 0; 

for (i = 0; i < inputToStringArray.length; i++) { 
    try { 
     values.add(Double.parseDouble(inputToStringArray[i])); 
    } catch (NumberFormatException e) { 
     // not a number! 
     e.printStackTrace(); 
    } 

} 
1

一)其实你调用方法values.add()两次(你不需要它了,如果条款)。

b)您可能会遇到一个异常,如果字符串值不是一个数字,你应该抓住这个

你应该使用这样的事情:

for (int i = 0; i < inputToStringArray.length; i++) { 
    try { 
     values.add(Double.parseDouble(inputToStringArray[i])); 
    } catch (NumberFormatException e){} 
}