JAVA:从txt文件中读取行并创建一个对象

时间:2019-02-12 16:54:45

标签: java

我是计算机科学的新学生,我必须创建一个库存程序,以这种格式从txt文件中读取有关产品的信息:部门;计量单位;数量;价格;唯一代码;名称; (例如:E; U; 20; 1,50; 87678350; Lamp)。因此,我必须: -计算股票的总价值 销售产品 -产品插入 -通过唯一的代码搜索产品。 如果行中具有相同的唯一代码,则程序将报告错误。

我设法读取txt文件中的行,但是我不知道如何从其中计算股票的总价值。

public class Emporium{
public static void main (String[]args) throws IOException  {
Scanner input = new Scanner(new File("EMPORIUM.txt"));
    input.useDelimiter(";|\n"); 
    Product[] products = new Product[0];
    while(input.hasNext()) {
        String department = input.next();
        String unit=input.next();
        int quantity=input.nextInt();
        double price=input.nextDouble();
        long code=input.nextLong();
        String name=input.next();

        Product newProduct = new Product(department,unit,quantity,price,code,name);   
        products= addProducts(products,newProducts);
    }
    for (Product product: products) {
        System.out.println(product);
    }}private static Product[] addProduct(Product[] products, Product  productToAdd) {
    Product[] newProducts =new Product[products.length+1];
    System.arraycopy(products,0,newProducts,0, products.length);
    newProducts[newProducts.length-1]= productToAdd;
    return newProducts;
}

public static class Product {

protected String department;
protected String unit;
protected int quantity;
protected double price;
protected long code;
protected String name;

private static NumberFormat formatter = new DecimalFormat("#0.00");

public Product(String dep,String uom,int qnt,double prz,long cod,String nm) {
    department=dep;
    unit=uom;
    quantity=qnt;
    price=prz;
    code=cod;
    name=nm;

}
@Override
public String toString() {
    return  String.format(department+";"+unity+";"+quantity+";"+formatter.format(price)+";"+code+";"+name);
}   
}   
}

我的问题是:如何读取文件中产品的价值并将其与其他产品的价格相加?这意味着我需要对唯一的代码执行相同的操作才能找到特定的产品。 非常感谢您的协助。

2 个答案:

答案 0 :(得分:0)

您已经将产品读入一个数组中,您需要遍历该数组并将每个price * quantity加在一起。

例如...

double totalValue = Arrays.stream(products).mapToDouble(p -> p.quantity * p.price).sum();

这将遍历每个产品,并将每个产品映射到一个两倍(数量乘以该产品的价格),然后对所有结果求和。

答案 1 :(得分:0)

正确的方法是在您的产品类中包含Getters和Setters。

正如您在代码中看到的那样,您只需传入变量并在构造函数中对其进行初始化,但是使用getter和setter对其进行初始化会更好,因为这是一种良好的编程习惯,并且会为代码添加更多功能。

示例

public static class Product {

    protected String department;
    protected String unit;
    protected int quantity;
    protected double price;
    protected long code;
    protected String name;

    private static NumberFormat formatter = new DecimalFormat("#0.00");

    public Product(String dep,String uom,int qnt,double prz,long cod,String nm) {

    setDep(dep);
    setUom(uom);
    setQnt(qnt);
    setPrz(prz);
    setCod(cod);
    setNm(nm);
    }

    public void setPrz(double prz){
       this.price = price;
    }

    //Other setters

    public double getPrz(){
       return price;
    }

    //Other getters
    @Override
    public String toString() {
        return  String.format(department+";"+unity+";"+quantity+";"+formatter.format(price)+";"+code+";"+name);
    } 

}

在“产品类别”中使用吸气剂和吸气剂,您可以:

  1. 创建一个方法来计算ArrayList中所有产品的总和
  2. 使用您的唯一标识符在阵列中搜索特定产品
  3. 按变量对Arraylist进行排序,例如部门,价格等。