通过扫描输入文件创建对象?

时间:2014-05-11 04:09:59

标签: java object

我正在编写一个跟踪库存的简单程序。我有一个名为“inventory-txt”的输入文件需要扫描并创建一个对象。该文件如下所示:

(项目,数量,价格)

pen 1000 2

记事本1050 5

画笔500 3

剪刀398 4

橡皮擦199 2

纸张重量50 3

订书机 - 小100 5

订书机 - 大50 8

marker 1000 2

这是我到目前为止所得到的:

public class Item {
    private String name;
    private int quantity;
    private double pricePerUnit;

// Constructor for class Item
Item(String name, int quantity, double pricePerUnit){
    this.name = name;
    this.quantity = quantity;
    this.pricePerUnit = pricePerUnit;
}

// Setter method for name
public void setName(String name){
    this.name = name;
}
// Getter method for name
public String getName(){
    return name;
}

// Setter method for quantity
public void setQuantity(int quantity){
    this.quantity = quantity;
}
// Getter method for quantity
public double getQuantity(){
    return quantity;
}

// Setter method for price per unit
public void setPricePerUnit(double pricePerUnit){
    this.pricePerUnit = pricePerUnit;
}
// Getter method for price per unit
public double getPricePerUnit(){
    return pricePerUnit; 
}

}

 public static void main(String[] args) {
    // To re-factor the Inventory management program
    // Task 2.a.i.
    File inputFile;
    Scanner Input = null;
    try{
        inputFile = new File("Assignment13-inventory.txt");
        Input = new Scanner(inputFile);
        while(Input.hasNext()){
            String name = Input.next();
            int quantity = Input.nextInt();
            double pricePerUnit = Input.nextDouble();
            System.out.println(name);
            System.out.println(quantity);
            System.out.println(pricePerUnit);


        }


    } catch(FileNotFoundException e){
       System.out.println("File does not exist");
      }

  Input.close();

  // Task 2.a.ii.

Item item1 = new Item();
item1.setName(name);
System.out.println(item1.getName());
item1.setPrice(price);
item1.setPricePerUnit(pricePerUnit);  

文件已成功扫描,但我很难创建每个对象。每个对象都应该拥有自己的名称,数量和价格。请帮我弄清楚如何创建这些对象!

3 个答案:

答案 0 :(得分:1)

创建一个List来保存你的对象,然后在阅读输入后调用构造函数。

public static void main(String[] args) {
    List<Item> myItems = new ArrayList<Item>();
    // .... Other code.
    String name = Input.next();
    int quantity = Input.nextInt();
    double pricePerUnit = Input.nextDouble();
    myItems.add(new Item(name, quantity, pricePerUnit));
    // ... Other code
}

答案 1 :(得分:0)

您想要在循环浏览文件时创建新项目并存储它们。

使用您提供的数据查看此Ideone Example

Scanner s = new Scanner("Assignment13-inventory.txt");
List<Item> items = new ArrayList<Item>();

while(s.hasNext()){
    String name = s.next();
    int quantity = s.nextInt();
    double pricePerUnit = s.nextDouble();
    items.add(new Item(name, quantity, pricePerUnit));
}
s.close();

作为旁注,请避免给变量一个大写字母,因为那些应该保留给类名(例如代码中的Input)。

答案 2 :(得分:0)

请记住放置完整路径以查找文件,而不仅仅是文件名。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test
{

    public static void main(String[] args)
    {
        // To re-factor the Inventory management program
        // Task 2.a.i.
        File inputFile;
        Scanner Input = null;
        try
        {
            List<Item> items = new ArrayList<Item>();
            inputFile = new File("/full/location/of/the/file/Assignment13-inventory.txt");
            Input = new Scanner(inputFile);
            while (Input.hasNext())
            {
                String name = Input.next();
                int quantity = Input.nextInt();
                double pricePerUnit = Input.nextDouble();
                System.out.println(name);
                System.out.println(quantity);
                System.out.println(pricePerUnit);
                System.out.println("Creating the item and adding it to the list of items:");
                items.add(new Item(name, quantity, pricePerUnit));
            }

            System.out.println("These are the items read:");
            System.out.println(items);

        }
        catch (FileNotFoundException e)
        {
            System.out.println("File does not exist");
        }

        Input.close();
    }
}

class Item
{
    private String name;
    private int quantity;
    private double pricePerUnit;

    // Constructor for class Item
    public Item(String name, int quantity, double pricePerUnit)
    {
        this.name = name;
        this.quantity = quantity;
        this.pricePerUnit = pricePerUnit;
    }

    // Setter method for name
    public void setName(String name)
    {
        this.name = name;
    }

    // Getter method for name
    public String getName()
    {
        return name;
    }

    // Setter method for quantity
    public void setQuantity(int quantity)
    {
        this.quantity = quantity;
    }

    // Getter method for quantity
    public double getQuantity()
    {
        return quantity;
    }

    // Setter method for price per unit
    public void setPricePerUnit(double pricePerUnit)
    {
        this.pricePerUnit = pricePerUnit;
    }

    // Getter method for price per unit
    public double getPricePerUnit()
    {
        return pricePerUnit;
    }

    @Override
    public String toString()
    {
        return "Item [name=" + name + ", quantity=" + quantity + ", pricePerUnit=" + pricePerUnit + "]";
    }


}

这是输出:

pen
1000
2.0
Creating the item and adding it to the list of items:
notepad
1050
5.0
Creating the item and adding it to the list of items:
paint-brush
500
3.0
Creating the item and adding it to the list of items:
scissors
398
4.0
Creating the item and adding it to the list of items:
eraser
199
2.0
Creating the item and adding it to the list of items:
paper-weight
50
3.0
Creating the item and adding it to the list of items:
stapler-small
100
5.0
Creating the item and adding it to the list of items:
stapler-large
50
8.0
Creating the item and adding it to the list of items:
marker
1000
2.0
Creating the item and adding it to the list of items:
These are the items read:
[Item [name=pen, quantity=1000, pricePerUnit=2.0], Item [name=notepad, quantity=1050, pricePerUnit=5.0], Item [name=paint-brush, quantity=500, pricePerUnit=3.0], Item [name=scissors, quantity=398, pricePerUnit=4.0], Item [name=eraser, quantity=199, pricePerUnit=2.0], Item [name=paper-weight, quantity=50, pricePerUnit=3.0], Item [name=stapler-small, quantity=100, pricePerUnit=5.0], Item [name=stapler-large, quantity=50, pricePerUnit=8.0], Item [name=marker, quantity=1000, pricePerUnit=2.0]]