Как добавить и распечатать объекты из csv в arrayList - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь добавить продукт, считанный из файла CSV, в ArrayList и создать объект для каждого продукта. Но когда я пытаюсь распечатать массив, используя для каждого цикла, я продолжаю получать последний элемент, в этом случае я получаю телевизор три раза

мой 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;
    }
}

мой главный:

    try {
        product.readPrice();
        for (product product : product.getList()) {
        System.out.println(product.getName()+"--"+product.getPrice());
        }
    }
    catch (IOException e) {
    }

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вся проблема в том, что вы используете статические переменные:

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

}
0 голосов
/ 09 мая 2018
    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;    
       }    
       }    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...