2013-05-02 60 views
0

嗨,我有這個錯誤,正在擾亂我!ArrayList <String>錯誤

我想要做的是分裂一個文本文件,使用「;」

之後存儲一個ArrayList,但是這個錯誤不斷彈出!

package au.edu.canberra.g30813706; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import android.app.Activity; 
import android.os.Environment; 
import android.widget.EditText; 


public class FileReader extends Activity{{ 

    ArrayList<String> sInfo = new ArrayList<String>(); 

    String txtName = "AccomodationTxt.txt"; 
    File root = Environment.getExternalStorageDirectory(); 
    File path = new File(root, "CanberraTourism/" + txtName); 

    try { 

     BufferedReader br = new BufferedReader (
          new InputStreamReader(
          new FileInputStream(path))); 
     String line; 
     String[] saLineElements; 
     while ((line = br.readLine()) != null) 
     { 
      //The information is split into segments and stored into the array 
      saLineElements = line.split(";"); 
      sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]); 

     } 
     br.close(); 


    } 
    catch (FileNotFoundException e) { 

     System.err.println("FileNotFoundException: " + e.getMessage()); 
    }} 

} 

錯誤:

The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (String, String, String, String, String) 

回答

1

您不能使用add方法添加多個元素。您需要使用addAll。事情是這樣的:

List<String> list = new ArrayList<String>(); 
list.addAll(Arrays.asList(saLineElements[0], saLineElements[1])); 

使用addAll你可以任意包含字符串的集合添加到列表中。

+0

爲什麼不'list.addAll(Arrays.asList(saLineElements).subList(0,4));'?用於檢查saLineElements包含最少數量的元素的獎勵點。 – luke 2013-05-02 12:03:18

0
ArrayList<String> sInfo = new ArrayList<String>(); 

不能使用add(int, String)添加多個String。你不能做sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]);

使用addAll()代替,

sInfo.addAll(Arrays.asList(saLineElements[0], saLineElements[1], 
         saLineElements[2], saLineElements[3], saLineElements[4])); 
1

替換:

sInfo.add(saLineElements[0], saLineElements[1], saLineElements[2], saLineElements[3], saLineElements[4]); 

有:字符串型

for (int i = 0; i < saLineElements.length; i++) 
    sInfo.add(saLineElements[i]); 
+0

有更多簡潔的方法來添加元素,而無需顯式循環。 – luke 2013-05-02 12:13:06

+0

這個解決方案的優勢在於每行所需的元素數量與其所需要的數量相同 – 2013-05-02 12:34:17

+0

像其他人所說的那樣,addAll如何呢? – luke 2013-05-02 12:50:51

0

有你代碼中存在兩個問題,第一是你試圖錯誤地使用ArrayList添加方法。其次是你試圖以非常原始的方式存儲信息。 在面向對象編程中,正確的方法是用對象來表示數據。正如文件的名稱所示,您可能會嘗試將與分號分隔的住宿相關數據存儲在文件中。更好地創建表示具有屬性的住宿數據的類(例如「住宿」),如您在文件中用分號分隔的那樣。然後創建對象住宿喜歡的ArrayList:ArrayList的 = accomList新的ArrayList

然後使用相同的文件閱讀和分割每行的邏輯,創建和像ArrayList中添加住宿對象: accomList.add(新住宿(saLineElements [0],saLineElements [1],saLineElements [2],saLineElements [3],saLineElements [4]))

確保在您的Accommodation類中添加適當的構造函數。

如果您遵循OOPS概念,您的代碼應該看起來更好,並且工作得很好。

希望它能幫助!

相關問題