2014-02-19 51 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){} 
}