这是我的整个代码,它很复杂,但请帮助我。这花了我2天但我失败了:
public static ArrayList<DocGia> XuatDocGia() throws IOException {
ArrayList<DocGia> listDocGia = new ArrayList<>();
File fileDocGia = new File("fileDocGia.txt");
if(fileDocGia.exists() == false) {
System.out.println("Chưa có đọc giả nào trong thư viện");
} else {
BufferedReader br = new BufferedReader(new FileReader("fileDocGia.txt"));
if (br.readLine() == null) {
System.out.println("Chưa có đọc giả nào trong thư viện");
} else {
int soDong = DemSoDong("fileDocGia.txt");
int dongHienTai = 0;
Scanner fileScanner = new Scanner(fileDocGia);
for(int i = 0, z = 0;;i++, z++) {
DocGia docGia = null;
System.out.println("***Đọc giả thứ: " + (i+1));
docGia.tendocgia = fileScanner.nextLine();
if(i >= 1) {
docGia.tendocgia = fileScanner.nextLine();
}
docGia.maDocGia = fileScanner.nextLine();
docGia.soSachmuon = fileScanner.nextInt();
docGia.thoiGianMuonSach = fileScanner.nextInt();
listDocGia.add(docGia);
docGia.XuatDocGia();
dongHienTai += 4;
if(dongHienTai == soDong) {
fileScanner.close();
break;
}
}
}
for(DocGia docGia: listDocGia) {
docGia.XuatDocGia();
}
}
return listDocGia;
}
查看我的代码,当我运行时:
docGia.XuatDocGia();
- &GT;每个元素的值都在调试时正确。它也意味着内部变量的值是正确的。但在这个功能的最后。我跑
for(DocGia docGia: listDocGia) {
docGia.XuatDocGia();
}
这是XuatDocGia
功能:
public static void XuatDocGia(){
System.out.println(tendocgia);
System.out.println(maDocGia);
System.out.println(soSachmuon);
System.out.println(thoiGianMuonSach);
}
它只显示了此ArrayList中的最后一个元素,重复3次(等于元素数)。
我认为问题来自添加listDocGia.add(docGia);
你们不需要在我的代码中烦扰其他一切,因为我知道它真的很复杂。我仔细测试过,只关注我的问题。
我很抱歉,因为我是越南人,初学者是Java。下次一切都将是英语。非常感谢你。
答案 0 :(得分:1)
如果这是实际代码,则要向List添加空引用,但由于您使用静态方法来打印值,因此不会得到NullPointerException
。假设您的代码通过了编译,这意味着DocGia
类的所有成员都是静态的,这就解释了为什么在循环的每次迭代中得到相同的值。
你应该改变
DocGia docGia = null;
到
DocGia docGia = new DocGia ();
并将DocGia
的所有成员(包括打印它们的XuatDocGia
方法)更改为非静态。