You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从CSV读取产品存入ArrayList后打印重复最后元素的问题

问题分析与解决方案

嘿,我一眼就看出问题所在了——你的product类里的属性变量被错误地声明成**静态(static)**的了!

核心问题

private static String Name;
private static double Price;

静态变量是属于整个product类的,而不是每个product对象实例独有的。每次你调用new product(...)创建新对象时,都会把这两个静态变量的值覆盖成当前对象的参数。所以当你遍历列表时,所有对象的getName()和getPrice()返回的都是最后一次设置的TV和250。

修复步骤

  1. 去掉属性的static关键字,让它们成为实例变量,每个对象拥有自己独立的属性值:
private String Name;
private double Price;
  1. 修正构造方法的赋值逻辑,直接给当前实例的属性赋值(可以用this关键字明确指向当前对象,避免歧义):
public product(String Name, double Price) {
    this.Name = Name;
    this.Price = Price;
}

修正后的完整product类代码

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class product {
    // 去掉static,改为实例变量
    private String Name;
    private double Price;

    public static List<product> List_product = new ArrayList<>();

    public static void readPrice() throws IOException {
        FileReader info = new FileReader("info.csv");
        BufferedReader reader = new BufferedReader(info);
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            String[] attributes = line.split(",");
            // 注意去掉属性值前后的空格,否则解析double会报错
            double price = Double.parseDouble(attributes[1].trim());
            List_product.add(new product(attributes[0].trim(), price));
        }
        reader.close();
    }

    public product(String Name, double Price) {
        this.Name = Name;
        this.Price = Price;
    }

    public String getName() {
        return Name;
    }

    public double getPrice() {
        return Price;
    }

    public static List<product> getList() {
        return List_product;
    }
}

另外补充个小细节:你的CSV每行的第二个字段后面有空格(比如, 20000),解析double的时候记得用trim()去掉空格,否则会抛出NumberFormatException。

运行结果

修改后再执行你的main方法,就能得到正确的输出了:

car--20000.0
table--150.0
TV--250.0

内容的提问来源于stack exchange,提问作者csse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:37:14