Java 如何将对象从csv添加和打印到arrayList

Java 如何将对象从csv添加和打印到arrayList,java,csv,object,arraylist,Java,Csv,Object,Arraylist,我试图将从CSV文件读取的产品添加到ArrayList中,并为每个产品创建一个对象。但是当我尝试使用for-each循环打印ArrayList时,我会一直得到最后一个元素,在这种情况下,我得到了三次TV 我的csv文件: 汽车,20000 表,150 电视,250 我的产品类别: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayL

我试图将从CSV文件读取的产品添加到ArrayList中,并为每个产品创建一个对象。但是当我尝试使用for-each循环打印ArrayList时,我会一直得到最后一个元素,在这种情况下,我得到了三次TV

我的csv文件:

汽车,20000

表,150

电视,250

我的产品类别:

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

public class product {
    private static String Name;
    private static 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 price = Double.parseDouble(attributes[1]);
            List_product.add(new product(attributes[0], price));
        }
        reader.close(); 
    }

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

    public String getName() {
        return Name;
    }

    public double getPrice() {
        return Price;
    }

    public static List<product> getList() { 
        return List_product;
    }
}
试试这个,
主类
试一试{
Product.readPrice();
对于(产品:Product.getList()){
System.out.println(product.getName()+“--”+product.getPrice());
}
}捕获(IOE异常){
}
公共类产品{
私有字符串名称;
私人双价;
public static List listProduct=new ArrayList();
public static void readPrice()引发IOException{
FileReader info=新的FileReader(“info.csv”);
BufferedReader reader=新的BufferedReader(信息);
虽然(正确){
字符串行=reader.readLine();
如果(line==null){
打破
}    
String[]attributes=line.split(“,”);
double price=double.parseDouble(属性[1]);
添加(新产品(属性[0],价格));
}    
reader.close();
}    
公共产品(字符串名称,双倍价格){
this.name=名称;
这个价格=价格;
}    
公共字符串getName(){
返回名称;
}    
公共双getPrice(){
退货价格;
}    
公共静态列表getList(){
退货清单产品;
}    
}    

整个问题在于使用静态变量:

private static String Name;
private static double Price;
它们属于类,而不是您创建的对象。创建最后一个对象时,它将覆盖其他对象

所以,完成任务的正确方法是更改产品类(请使用大写,因为它是命名类的代码约定)

类产品{
私有字符串名称;
私人双价;
public static List_product=new ArrayList();
公共产品(字符串名称,双倍价格){
this.name=名称;
这个价格=价格;
}
//…其他代码可以
}

调试器将帮助您修复它fyi:不要使用
文件读取器来读取CSV,请使用类似Apache Common CSV的API来正确读取它。这比
字符串更复杂。split(,”
任何地方都不能调用readPrice()。@dmitrichereimis如果你是对的,我必须先调用它,但问题是所有列的值都相同。换句话说,第二个值将覆盖第一个值,依此类推。有什么提示吗?请解释一下这是怎么发生的?我看到您使用ArrayList来存储产品对象。此数据结构允许重复。因此,您可以在其中放入任意数量的相等对象。我将重复CSV文件中的最后一个元素。我确信CSV文件有不同的元素在我的邮件中共享示例CSV文件nandhacs7@gmail.comShare示例csv文件和示例输出。我向您发送了一封电子邮件。
    Try This,
    Main.java
        try {
        Product.readPrice();
        for (Product product : Product.getList()) {
        System.out.println(product.getName()+"--"+product.getPrice());
        }
        }catch (IOException e) {
        }

       public class Product {    
       private String name;    
       private double price;    
       public static List<Product> listProduct = 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 price = Double.parseDouble(attributes[1]);        
       listProduct.add(new Product(attributes[0], 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 listProduct;    
       }    
       }    
private static String Name;
private static double Price;
class Product {
    private String name;
    private double price;
    public static List<Product> List_product = new ArrayList<>();

    public Product(String name, double price) {
       this.name = name;
       this.price = price;
    }
    //...other code is fine

}