拉信息并将其与CSV文件进行比较

问题描述 投票:-1回答:1

在我的作业中,我们应该创建一个ListArray并从CSV文件中提取信息,打印出列表,然后通过扫描仪找到用户要求的信息并打印出项目。我们必须包括:

  • [ListArray()具有10个元素,
  • ListArray( int capacity )
    • [使用具有容量元素的数组构造列表,
  • void add( E item )
    • 将项目添加到列表,
  • int find( E target )
    • 在列表中查找目标。如果找到,则返回索引(相对0)如果找不到,则返回-1。
    • find()方法应使用equals()方法比较Java ArrayList类完成的通用对象。
  • E get( int index )
    • 返回列表中位置索引处的对象E。如果索引超出范围,则返回null。

到目前为止,我还无法使它正常工作,但是我已经明白了要从列表中打印出来并找到零件的位置。尽管遍历“找不到部分”的其他语句,但我很迷失,哈勃无法找到我。任何帮助表示赞赏。

public class Prog2<E> {

    public static void main(String[] args) {
        String partNumber = "";
        String description = "";
        double price = 0;
        String warehouseID = "";
        int quantity = 0;

        Scanner part = null;
        try {
            part = new Scanner(new File("parts.txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Error: File was not found");
        }
        System.out.printf("%-13s %-30s %9s %14s %11s\n", " Part Number", "  Description", "  Price", " Warehouse",
                "Quantity");
        System.out.printf("%-13s %-32s %8s    %11s %11s\n", "-------------", " ------------------------", "-------",
                "-----------", "----------");

        ListArray<Part> items = new ListArray<Part>();
        while (part.hasNext()) {
            String partInfo = part.nextLine();
            String[] tokens = partInfo.split(",[ ]*");

            partNumber = tokens[0];
            description = tokens[1];
            price = Double.parseDouble(tokens[2]);
            warehouseID = tokens[3];
            quantity = Integer.parseInt(tokens[4]);

            items.add(new Part(partNumber, description, price, warehouseID, quantity));
            System.out.printf("%-14s %-31s %8.2f %14s %11d\n", partNumber, description, price, warehouseID, quantity);
        }
        Scanner in = new Scanner(System.in);
        System.out.println("\nEnter any part number.");
        String answer = in.nextLine().toUpperCase();
        for (int i = 0; i < items.size(); i++) {
            if (items.get(i).getPartNumber().equals(answer)) {

                System.out.printf("Part Number: %-10s\n", items.get(i).getPartNumber());
                System.out.printf("Description: %-20s\n", items.get(i).getDescription());
                System.out.printf("Price: %-3.2f\n", items.get(i).getPrice());
                System.out.printf("Warehouse: %s\n", items.get(i).getWarehouseID());
                System.out.printf("Quantity: %d\n", items.get(i).getQuantity());
            } else {
                System.out.println("Unable to locate part. Please try again.");
            }
        }
        part.close();
    }

}

public class Part implements Comparable {

    private String partNumber;
    private String description;
    private double price;
    private String warehouseID;
    private int quantity;

    public Part(String partNumber, String description, double price, String warehouseID, int quantity) {
        super();
        this.partNumber = partNumber;
        this.description = description;
        this.price = price;
        this.warehouseID = warehouseID;
        this.quantity = quantity;
    }

    public String getPartNumber() {
        return partNumber;
    }

    public String getDescription() {
        return description;
    }

    public double getPrice() {
        return price;
    }

    public String getWarehouseID() {
        return warehouseID;
    }

    public int getQuantity() {
        return quantity;
    }

    @Override
    public int compareTo(Object args) {
        return this.partNumber.compareTo(((Part) args).partNumber);
    }

    @Override
    public boolean equals(Object t) {
        if (this == t) {
            return true;
        }
        if (t == null) {
            return false;
        }
        if (getClass() != t.getClass()) {
            return false;
        }
        Part other = (Part) t;
        if (partNumber == null) {
            if (other.partNumber != null) {
                return false;
            }
        } else if (!partNumber.equals(other.partNumber)) {
            return false;
        }
        return true;
    }

}

public class ListArray<E extends Comparable> {

    private E[] list;
    private int size;

    public ListArray() {
        super();
        list = (E[]) new Comparable[13];
        size = 0;
    }

    public void add(E item) {
        if (size >= list.length) {

        }
        list[size] = item;
        size++;
    }

    public void add(int index, E item) {
        int pos = size - 1;
        while (pos > index) {
            list[pos + 1] = list[pos];
            pos--;
        }
        list[index] = item;
        size++;
    }

    public E get(int index) {
        return list[index];
    }

    public int size() {
        return size;
    }

    public Object indexOf(Part target) {
        int index = 0;
        while (list[index].equals(target) != true && index < size) {
            index++;
        }
        if (list[index].equals(target)) {
            return (int) list[index];
        } else {
            return null;
        }
    }

}

我认为这与我的可比性有关;但是,我茫然为什么它不断打印出找不到的东西。我也找不到能够起作用的发现,这也可能是我的问题。

java arraylist comparable
1个回答
0
投票

您的问题是,只要遇到列表中与给定零件号不匹配的零件,您就在打印Unable to locate part. Please try again.。因此,您需要设置一个标志来存储是否找到了零件。只有在循环之后,您才能确定是否找到了零件。

boolean found = false;
for (int i = 0; i < items.size(); i++) {
    if (items.get(i).getPartNumber().equals(answer)) {
        System.out.printf("Part Number: %-10s\n", items.get(i).getPartNumber());
        System.out.printf("Description: %-20s\n", items.get(i).getDescription());
        System.out.printf("Price: %-3.2f\n", items.get(i).getPrice());
        System.out.printf("Warehouse: %s\n", items.get(i).getWarehouseID());
        System.out.printf("Quantity: %d\n", items.get(i).getQuantity());

        found = true;
        break;
    }
}
if (!found) {
    System.out.println("Unable to locate part. Please try again.");
}

旁注:下次您在StackOverflow上提问时,请包括相关数据;对您的代码进行反向工程相当困难!尽管如此,欢迎来到社区!

© www.soinside.com 2019 - 2024. All rights reserved.