ArrayList as Object属性不保存值

时间:2018-02-06 22:02:40

标签: java arrays object arraylist

我有一个对象,具有以下属性:

public class Club {

    private String name;
    private ArrayList<Integer> points;
    private int average;

    Club(String name, ArrayList<Integer> points, int average){
        this.name = name;
        this.points = new ArrayList<>();
        this.average = average;

我尝试使用来自txt文件的数据填充arraylist:

        while((currentLine = br.readLine()) != null){

            String name;
            ArrayList<Integer> points = new ArrayList<>();
            int average;
            String[] clubData = currentLine.split(",");
            name = clubData[0];

            int score2 = Integer.parseInt(clubData[2]);
            int score3 = Integer.parseInt(clubData[3]);
            int score4 = Integer.parseInt(clubData[4]);
            int score5 = Integer.parseInt(clubData[5]);

            points.add(score2);
            points.add(score3);
            points.add(score4);
            points.add(score5);

            average = points.stream().mapToInt(Integer::intValue).sum()/4;
            Club club = new Club(name, points, average);

当我打印物体时,我明白了:

Name: Clubname Points: [] Average: 6

因此,文件的值保存在列表中。因为计算平均值(6),这是好的值。但是,列表&#39;点&#39;对象本身是空的。谁能解释一下这个?

2 个答案:

答案 0 :(得分:1)

Club类中的构造函数每次都会创建一个新的ArrayList。将其更改为此

Club(String name, ArrayList<Integer> points, int average){
    this.name = name;
    this.points = points;
    this.average = average;

答案 1 :(得分:0)

您的构造函数忽略points

复制列表(浅拷贝):

this.points = new ArrayList<>(points);

或保留对现有列表的引用:

this.points = points;

此外,您目前正在使用Java的整数除法来计算平均值。这看起来很有效,因为你没有抱怨平均值不正确,但一般来说你希望将average保持为double并除以double字面值,4.0

average = points.stream().mapToInt(Integer::intValue).sum()/4.0;

此外,IntStream为您提供平均计算。 The average method returns an OptionalDouble

average = points.stream().mapToInt(Integer::intValue).average().getAsDouble();