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
。
对象中的所有字段均为String
种类。 arrayList包含从TXT文件中提取的所有数据。我试图将所有数据从arrayList传输到对象数组。 txt文件有35列和1500行。数据由空格分隔
答案 0 :(得分:4)
变化:
ArrayList arrayList = null;
...
arrayList =new ArrayList();
为:
ArrayList<String> arrayList = null;
arrayList = new ArrayList<String>();
或只是:
ArrayList<String> arrayList = new ArrayList<String>();
答案 1 :(得分:3)
List包含Object实例。 get()方法返回Object。如果需要类型安全列表,则必须使用泛型类型信息:
List<String> list = new ArrayList<String>();
如果使用原始类型(没有<String>
泛型类型信息),那么编译器不知道List只包含String实例,因此您必须转换结果:
String s = (String) list.get(i);
附注:学习缩进代码并遵守Java命名约定。这是不可读的。
答案 2 :(得分:2)
我认为问题在于您使用原始ArrayList
类型而不是使用参数化ArrayList
。因此,ArrayList
上的所有操作都将假定参数和返回类型为Object
而不是String
,因为您尚未向Java指出您希望ArrayList
持有String
。如果没有您提供的额外信息,Java无法知道存储在其中的对象仅为String
,而不是Integer
,其他ArrayList
,JPanel
等等。
要解决此问题,请更改行
private static ArrayList arrayList;
阅读
private static ArrayList<String> arrayList;
这明确向Java表明您的ArrayList
应该只保留String
,因此它可以知道arrayList.get(i)
的返回类型将是String
而是而不是全能Object
。同样,改变
arrayList = new ArrayList();
到
arrayList = new ArrayList<String>();
有关更多信息,请阅读Java Generics。它们是一个非常强大的工具,但很容易被不正确地使用(如你的情况)。一个很好的来源是Oracle的this article。
希望这有帮助!
答案 3 :(得分:1)
ArrayList<String> arrayList= null;
除非指定类型,否则ArrayList get调用返回一个Object。
答案 4 :(得分:1)
在Java 7中添加了Diamond:
ArrayList<String> arrayList = new ArrayList<>();