这是我的整个代码,非常复杂,但请帮助我。我花了两天时间,但失败了:
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();
->每个元素的值都在调试时正确。这也意味着里面的变量值是正确的。但在此功能结束时。我跑
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的初学者。下一次,一切都会变成英语。非常感谢。
如果这是实际的代码,则将为列表添加空引用,但是由于使用的是静态方法来打印值,因此不会得到NullPointerException
。假设您的代码通过了编译,这意味着DocGia
该类的所有成员都是静态的,这解释了为什么在循环的每次迭代中获得相同的值。
你应该改变
DocGia docGia = null;
至
DocGia docGia = new DocGia ();
并将其所有成员DocGia
(包括XuatDocGia
打印它们的方法)更改为非静态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句