ArrayList只是为所有位置添加最后一个元素

时间:2016-04-07 08:55:35

标签: java arraylist

这是我的整个代码,它很复杂,但请帮助我。这花了我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。下次一切都将是英语。非常感谢你。

1 个答案:

答案 0 :(得分:1)

如果这是实际代码,则要向List添加空引用,但由于您使用静态方法来打印值,因此不会得到NullPointerException。假设您的代码通过了编译,这意味着DocGia类的所有成员都是静态的,这就解释了为什么在循环的每次迭代中得到相同的值。

你应该改变

DocGia docGia = null;

DocGia docGia = new DocGia ();

并将DocGia的所有成员(包括打印它们的XuatDocGia方法)更改为非静态。