2012-02-06 190 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