java提取信息并将其与CSV文件进行比较
在我的作业中,我们应该创建一个ListArray并从CSV文件中提取信息,打印出列表,然后通过扫描仪找到用户要求的信息并打印出项目。我们必须包括:
ListArray()
包含10个元素ListArray( int capacity )
- 使用包含容量元素的数组构造列表
void add( E item )
- 将项目添加到列表中
int find( E target )
- 在列表中查找目标。如果找到,则返回索引(相对0)
如果未找到,则返回-1李> - find()方法应该使用equals()方法来比较Java ArrayList类完成的泛型对象李>
- 在列表中查找目标。如果找到,则返回索引(相对0)
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;
}
}
}
我认为这是一个问题与我的可比性;然而,我不明白为什么它总是打印出找不到的内容。我还没有找到一个可行的方法,这也可能是我的问题
# 1 楼答案
对不起,忘记添加数据了。当我们稍后讨论这个问题时,我的问题是Boolean equals方法。这导致了获取正确信息的问题。我将为任何有类似问题的人提供我的完成代码和工作代码。我还将包括一个CSV文件的示例。同样,很抱歉没有那么快回复,也没有为问题添加相关数据`公共类程序2{
}
}
}
下面是CSV文件的一个示例
# 2 楼答案
您的问题是,每当您在列表中遇到与给定零件号不匹配的零件时,都会打印
Unable to locate part. Please try again.
。因此,您需要设置一个标志来存储是否找到了零件。只有在循环之后,您才能确定是否找到了零件旁注:请在下次询问StackOverflow问题时包含相关数据;对代码进行反向工程是相当困难的!尽管如此,欢迎来到社区