这是一项家庭作业。
我提示用户输入任意数量的数字,然后输入一个单词。因为我不知道将要输入的数字量,我将它们存储在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。
为什么?
答案 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){}
}