Java 为什么这个for循环的大小是我的ArrayList的两倍?
这是一个家庭作业 我会提示用户输入任意数量的数字,后跟一个单词。因为我不知道要输入的数字量,所以我将它们存储在字符串[]中,然后将它们移动到ArrayList中。 通过在空白处拆分扫描仪输入,我将输入正确地存储到字符串[]中 现在,我尝试将字符串[]的内容添加到ArrayList中,如下所示:Java 为什么这个for循环的大小是我的ArrayList的两倍?,java,loops,for-loop,Java,Loops,For Loop,这是一个家庭作业 我会提示用户输入任意数量的数字,后跟一个单词。因为我不知道要输入的数字量,所以我将它们存储在字符串[]中,然后将它们移动到ArrayList中。 通过在空白处拆分扫描仪输入,我将输入正确地存储到字符串[]中 现在,我尝试将字符串[]的内容添加到ArrayList中,如下所示: int i = 0; for ( i = 0; i < inputToStringArray.length; i++) { if(values.add(Doubl
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
为什么?基本上,如果Listadd返回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");
}
}
可能会更好…因为您添加了两次!If语句试图将其添加到值中,如果成功,则再次添加 试着这样做:
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();
}
}
for ( int i = 0; i < inputToStringArray.length; i++) {
try {
values.add(Double.parseDouble(inputToStringArray[i]));
} catch (NumberFormatException e){}
}
a实际上,您可以调用方法values.add两次,在if子句中不需要它 b如果字符串值不是数字,您可能会遇到异常,您应该捕捉到这一点 您应该使用如下内容:
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();
}
}
for ( int i = 0; i < inputToStringArray.length; i++) {
try {
values.add(Double.parseDouble(inputToStringArray[i]));
} catch (NumberFormatException e){}
}
因为这是您在代码中输入的内容。你有values.add两次。我的代码没有bug,它完全按照我编写的itList运行。add总是返回true。我看到了我的错误。非常感谢你!将在我的hw中引用此答案。@Davidermann我在讨论更多关于if语句的状态,然后是列表的要求和此上下文您的评论是正确的,但是如果列表实现未知,如果列表实现由于某种原因无法添加元素,则可能返回false…只是说…不,返回true。如果没有,那就是有人做错了什么。如果返回false,则没有任何意义,因为这是一个未定义的行为。@Davidermann它不是未定义的,Collectionsadd clear定义它。Return:true如果此集合因调用而更改-这意味着如果它返回false,则列表不会因调用而更改,这表明无法添加该项,但这是实现细节-ArrayList将始终返回true,其编码方式是这样的,或者抛出OutOfMemoryException,因为它无法调整其内部缓存的大小。。。;