2012-02-06 187 views
1
package mp1similar; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.StringTokenizer; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import EarthquakeRecord.Earthquakerecd; 


public class MP1Similar 
{ 

private static ArrayList arrayList ; 

public static void main(String[] args) 
{ 
ArrayList arrayList= null; 
    try 
    { 
    BufferedReader br = new BufferedReader(new FileReader("data/Catalog.txt")); 

    String line=""; 
    arrayList =new ArrayList(); 
    while((line = br.readLine())!=null) 
     { 
     // System.out.println(line); 
     StringTokenizer st = new StringTokenizer(line); 
     while(st.hasMoreTokens()) 
      { 
      //System.out.println(st.nextToken()); 
      arrayList.add(st.nextToken()); 
      //System.out.println(br.readLine()); 
      } 
     } 
    } 

    catch (FileNotFoundException ex) 
    { 
     System.out.println(ex.getMessage()); 
     ex.printStackTrace(); 
    } 
catch (IOException ex) 
    { 
      System.out.println(ex.getMessage()); 
      ex.printStackTrace(); 
    } 
      int j=0; 
    Earthquakerecd E[]= new Earthquakerecd[2000]; 
    for(int i=0;i< arrayList.size();i++) 
    { 
     System.out.println(arrayList.get(i)); 
     E[j] = new Earthquakerecd(); 


     E[j].setDate(arrayList.get(i)); 



    if (j>35) 
    { 
     j=0; 
    } 
    j++; 

    } 







} 

} 

我得到一行錯誤E[j].setDate(arrayList.get(i));它說實際參數不能通過方法調用轉換爲java.lang.String使用ArrayList類型錯誤?

該對象中的所有字段均爲String類型。 arrayList包含從TXT文件中提取的所有數據。我正在嘗試將所有數據從arrayList傳遞到對象數組。 txt文件有35列和1500行。該數據被分隔用空格

+0

我有一個問題,在ArrayList中我有差異的數據類型,而不只是字符串,我已經整型,浮點,雙,那我該怎麼辦? – 2012-02-06 21:21:05

回答

4

變化:

ArrayList arrayList = null; 
... 
arrayList =new ArrayList(); 

到:

ArrayList<String> arrayList = null; 
arrayList = new ArrayList<String>(); 

或只是:除非你指定

ArrayList<String> arrayList = new ArrayList<String>(); 
+0

我有一個問題,在ArrayList中我有diff數據類型,不只是字符串,我有int,float,double,那麼我該怎麼辦? – 2012-02-06 21:20:43

+1

使用單獨的列表來存儲不同的類型:'ArrayList ','ArrayList '等 – hmjd 2012-02-06 21:25:43

1
ArrayList<String> arrayList= null; 

ArrayList中得到調用返回的對象方式。

+0

謝謝,幫助! – 2012-02-06 21:11:21

+0

我有一個問題,在ArrayList中我有diff數據類型,而不只是字符串,我有int,float,double,那麼我該怎麼辦? – 2012-02-06 21:20:55

2

我認爲問題在於您使用的是原始ArrayList類型,而不是使用參數化的ArrayList。因此,ArrayList上的所有操作都將假定參數和返回類型爲Object而不是String,因爲您尚未向Java表明您希望ArrayList保存String。如果您沒有完成這些額外的信息,Java可以不知道存儲中的對象是完全String秒且不,說,Integer S,其他ArrayList S,JPanel S等

爲了解決這個問題,改線

private static ArrayList arrayList; 

閱讀

private static ArrayList<String> arrayList; 

這明確表明對Java,你應該ArrayList只持有String S,所以它可以知道的返回類型的arrayList.get(i)將是一個String而不是全部Object。同樣,改變

arrayList = new ArrayList(); 

arrayList = new ArrayList<String>(); 

有關詳細信息,關於Java泛型讀了。他們是一個非常強大的工具,但可以很容易地使用不當(如你的情況)。 Oracle的一個很好的來源是this article

希望這會有所幫助!

+0

我有一個問題,在ArrayList中我有diff數據類型,不只是字符串,我有int,float,double,那麼我該怎麼辦? – 2012-02-06 21:20:29

+0

如果您確實有多種數據類型,那麼您有兩種選擇。首先,您可以使用'ArrayList '並將所有內容統一視爲「對象」。或者,您可以使用'ArrayList ',然後使用類型轉換將對象轉換回其真實類型,一旦您知道該類型是什麼類型。 – templatetypedef 2012-02-06 21:21:45

3

列表包含對象實例。 get()方法返回Object。如果你想要一個類型安全列表中,您必須使用泛型類型信息:

List<String> list = new ArrayList<String>(); 

如果使用原始類型(不<String>泛型類型信息),那麼編譯器不知道的是,僅列出包含字符串因此您必須得出結果:

String s = (String) list.get(i); 

備註:學習縮進代碼並遵守Java命名約定。這是不可讀的。

+0

我有一個問題,在ArrayList中,我有diff數據類型,而不僅僅是字符串,我有int,float,double,那麼我該怎麼辦? – 2012-02-06 21:20:31

+0

您重新設計您的程序,因爲在單個列表中有多種數據並不正常。 – 2012-02-06 21:29:32

1

鑽石是在Java 7中添加:

ArrayList<String> arrayList = new ArrayList<>(); 
+0

我有一個問題,在ArrayList中我有diff數據類型,而不僅僅是字符串,我有int,float,double,那麼我該怎麼辦? – 2012-02-06 21:20:51