我一直在试图解决这个问题,这让我很难过。
我有一个类,它包含来自另一个类的对象的数组列表。 我正在尝试使用缓冲读取器从文本文件中获取对象的数据。 文本文件包含每行上新对象的信息。 我无法将数据循环到对象中。每次我尝试所有对象都有来自文本文档最后一行的数据。
这是数组列表所在类的代码块。
package weatherapp;
import java.util.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class WeatherHistory extends WeatherObservation{
BufferedWriter writer = null;
BufferedReader reader = null;
File myFile = new File("observations.txt");
FileReader fileReader = null;
WeatherObservation readIn = new WeatherObservation();
float tempReadIn;
int humidReadIn;
int UVReadIn;
int windSpeedReadIn;
int lineCounter = 0;
WeatherHistory(){
}
private ArrayList<WeatherObservation> list = new ArrayList<>();
int index;
//Add elements to the list
public void add(WeatherObservation item){
list.add(item);
}
public void indexAdd(int index, WeatherObservation item){
list.add(index, item);
}
//remove elements from the list
public void remove(WeatherObservation item){
list.remove(item);
}
public void indexRemove(int index){
list.remove(index);
}
//update element
public void set(int index, WeatherObservation item){
list.set(index, item);
}
//Return index of an object
public int indexOf(WeatherObservation item){
return list.indexOf(item);
}
//return object at an idex
public WeatherObservation get(int index){
return list.get(index);
}
//Get size of array list
public int size(){
return list.size();
}
//search list
public boolean search(WeatherObservation item){
return list.contains(item);
}
//Print list
public void getList(){
for(int counter = 0; counter < list.size(); counter++){
System.out.println(list.get(counter));
}
}
public void add(){
try{
fileReader = new FileReader(myFile);
reader = new BufferedReader(fileReader);
reader.readLine();
//Skip over the first line to get to the data
String line = null;
while((line = reader.readLine()) !=null){
lineCounter ++;
String[ ] data = line.split(" ");
//get place and date from array
readIn.place(data[0]);
readIn.dateDay(data[1]);
System.out.println(line);
//convert String from array to needed format
try
{
tempReadIn = Float.valueOf(data[2]);
humidReadIn = Integer.parseInt(data[3]);
UVReadIn = Integer.parseInt(data[4]);
windSpeedReadIn = Integer.parseInt(data[5]);
}
catch (NumberFormatException nfe)
{
Logger.getLogger(WeatherHistory.class.getName()).log(Level.SEVERE,
null, nfe);
}
readIn.temp(tempReadIn);
readIn.humid(humidReadIn);
readIn.uvIndex(UVReadIn);
readIn.windSpeed(windSpeedReadIn);
}
} catch (IOException ex){
Logger.getLogger(WeatherHistory.class.getName()).log(Level.SEVERE,
null, ex);
} finally {
try{
if(reader !=null){
reader.close();
}
} catch (IOException ex){
Logger.getLogger(WeatherHistory.class.getName()).log(Level.SEVERE,
null, ex);
}
}
for(int j = 0;j < lineCounter; j++){
list.add(readIn);
}
}
}
当我打印列表时,所有对象都具有相同的数据,并且添加了最后一个对象的数据。
package weatherapp;
public class WeatherApp {
public static void main(String[] args) {
WeatherHistory WHtest = new WeatherHistory();
WHtest.add();
WHtest.getList();
}
}
如何正确地将对象添加到数组列表中?
结果我向列表的所有位置添加了一个对象。
答案 0 :(得分:1)
所有对象都有相同的数据
'所有对象'是什么?您将相同的对象添加到数组中的每个位置。只有一个对象,所以当然它总是有相同的数据。
答案 1 :(得分:0)
我解决了这个问题。感谢EJB让我知道我正在重用同一个对象。
我搬了
WeatherObservation readIn = new WeatherObservation();
到while循环内部
我摆脱了for循环 -
for(int j = 0;j < lineCounter; j++){
list.add(readIn);
}
并放置
list.add(readIn)
来自while循环中的for循环
我希望这有助于任何遇到类似问题的人。