为什么这个for循环加倍了我的ArrayList的大小?

时间:2014-02-19 23:43:56

标签: java loops for-loop

这是一项家庭作业。

我提示用户输入任意数量的数字,然后输入一个单词。因为我不知道将要输入的数字量,我将它们存储在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]));
        }
    }

因为我不希望输入结尾的单词,我正在解析String []为双打。
问题是,ArrayList复制每个数字,连续两次存储 输入1,2.2,3.3将存储为1.0,1.0,2.2,2.2,3.3,3.3。

为什么?

3 个答案:

答案 0 :(得分:6)

基本上,如果List#add返回true,则会再次添加... {/ p>

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");
    }
}

可能会更好......

答案 1 :(得分: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();
    }

}

答案 2 :(得分:1)

a)实际上你调用了两次方法values.add()(你在if子句中不需要它)。

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

你应该使用这样的东西:

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