有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java提取信息并将其与CSV文件进行比较

在我的作业中,我们应该创建一个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

到目前为止,我还不能让它工作,但我已经到了一个点,它将打印出名单,并找到部分。虽然它重复了“找不到零件”的else语句,但我迷路了,哈勃望远镜找不到我。感谢您的帮助

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;
        }
    }

}

我认为这是一个问题与我的可比性;然而,我不明白为什么它总是打印出找不到的内容。我还没有找到一个可行的方法,这也可能是我的问题


共 (2) 个答案

  1. # 1 楼答案

    对不起,忘记添加数据了。当我们稍后讨论这个问题时,我的问题是Boolean equals方法。这导致了获取正确信息的问题。我将为任何有类似问题的人提供我的完成代码和工作代码。我还将包括一个CSV文件的示例。同样,很抱歉没有那么快回复,也没有为问题添加相关数据`公共类程序2{

    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", "      -", "             ", "   -",
                "     -", "     ");
        /**
         * List array is created
         */
        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 is created to get user input to compare to parts.txt
         */
        Scanner in = new Scanner(System.in);
        System.out.println("\nEnter any part number.");
        String answer = in.nextLine();
        for (int i = 0; i < items.size(); i++) {
            Part search = new Part(answer);
            int index = items.find(search);
            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());
            }
            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 Part(String partNumber) {
        super();
        this.partNumber = partNumber;
    }
    
    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);
    }
    

    }

    public class ListArray<E extends Comparable> {
    private E[] list;
    private int size;
    
    /**
     * Constructor for the class List array
     */
    public ListArray() {
        super();
        list = (E[]) new Comparable[13];
        size = 0;
    }
    
    public void add(E item) {
        if (size >= list.length) {
            E[] expansion = (E[]) new Comparable[size + 10];
            for (int i = 0; i < list.length; i++) {
                expansion[i] = list[i];
            }
            list = (E[]) new Comparable[size + 10];
            list = expansion;
        }
        list[size] = item;
        size++;
    }
    
    public ListArray(int capacity) {
        super();
        list = (E[]) new Comparable[capacity];
        size = 0;
    }
    
    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 int find(E target) {
        int index = 0;
        while ((list[index].compareTo(target)) != 0 && index < size) {
            index++;
        }
        if (list[index].compareTo(target) == 0) {
            return index;
        } else {
            return -1;
        }
    }
    
    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;
        }
    }
    

    }

    下面是CSV文件的一个示例

    12345,Left-Handed Bacon Stretcher,125.95,PGH,2
    
  2. # 2 楼答案

    您的问题是,每当您在列表中遇到与给定零件号不匹配的零件时,都会打印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问题时包含相关数据;对代码进行反向工程是相当困难的!尽管如此,欢迎来到社区