2012-02-06 2 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 методом invocation.Ошибка типа с использованием ArrayList?

Все поля в объекте: String Виды. ArrayList содержит все данные, извлеченные из файла TXT. Я пытаюсь передать все данные из arrayList в массив объектов. Файл txt имеет 35 столбцов и 1500 строк. Данные, разделённых пробелами

+0

Я один вопрос, в ArrayList я имею Diff типов данных и не только строки, я целый, дробный, двойной, то что мне делать? –

ответ

4

Изменить:

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

к:

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

или просто:

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

У меня один вопрос, в ArrayList у меня есть типы данных datatypes, а не только строка, у меня есть int, float, double, то что мне делать? –

+1

Используйте отдельный список для хранения различных типов: 'ArrayList ', 'ArrayList ' и т. Д. – hmjd

1
ArrayList<String> arrayList= null; 

ArrayList получить вызов возвращает объект, если не указано типа.

+0

спасибо, это помогло! –

+0

У меня один вопрос, в ArrayList у меня есть типы данных datatypes, а не только строка, у меня есть int, float, double, то что мне делать? –

2

Я думаю, проблема заключается в том, что вы используете необработанный тип ArrayList, а не используя параметризованный ArrayList. Следовательно, все операции на ArrayList будут предполагать, что типы параметров и возвращаемых значений являются Object, а не String, так как вы не указали на Java, что вы хотите, чтобы ArrayList удерживал String с. Без этой дополнительной информации от вас, Java не может знать, что объекты, хранящиеся в исключительно String s, а не, скажем, 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 дженериков. Они очень мощный инструмент, но могут быть легко использованы ненадлежащим образом (как в вашем случае). Один хороший источник - this article от Oracle.

Надеюсь, это поможет!

+0

У меня есть один вопрос, в ArrayList у меня есть типы данных datatypes, а не только строка, у меня есть int, float, double, то что мне делать? –

+0

Если у вас несколько типов данных, у вас есть два варианта. Во-первых, вы можете использовать 'ArrayList ' и обрабатывать все равно как 'Object'. Кроме того, вы можете использовать 'ArrayList ', а затем использовать приведение типов для преобразования объектов обратно в их реальный тип, как только вы знаете, что это за тип. – templatetypedef

3

Список содержит экземпляры объектов. Метод get() возвращает Object.Если вы хотите получить список типизированного, вы должны использовать информацию общего типа:

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

Если вы используете необработанный тип (без <String> информации общего типа), то компилятор не знает, что список содержит только строки экземпляров, и, таким образом, должны привести результат:

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

примечание стороны: научиться отступы ваш код и уважать Java именования. Это невозможно прочитать.

+0

У меня один вопрос, в ArrayList у меня есть типы данных datatypes, а не только строка, у меня есть int, float, double, то что мне делать? –

+0

Вы перепроектируете свою программу, потому что на самом деле не так просто иметь несколько видов данных в одном списке. –

1

Алмаз был добавлен в Java 7:

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

У меня один вопрос, в ArrayList у меня есть типы данных datatypes, а не только строка, у меня есть int, float, double, то что мне делать? –

Смежные вопросы