我有一个创建'Purchase'对象的类。可以使用recordItem()方法将此对象记录到ArrayList“purchaseList”。但是,我想创建一个函数,在给定itemNo整数的情况下可以返回特定的Purchase对象,到目前为止,我已经在getPurchase()中显示了我的代码,但是无法使其工作。
public class Purchase {
private String name;
private double price;
private int itemNo;
private int sort;
private ArrayList purchaseList = new ArrayList();
public Purchase(String name, double price, int itemNo, int sort) {
this.name = name;
this.price = price;
this.itemNo = itemNo;
this.sort = sort;
}
public void recordItem(int itemNumber, String description, double unitPrice, int sort) {
Purchase newPurchase = new Purchase(description, unitPrice, itemNumber, sort);
purchaseList.add(newPurchase);
}
public int getItemNo() {
return itemNo;
}
public Purchase getPurchase(int itemNumber) {
for(int i = 0; i < purchaseList.size(); i++) {
if(purchaseList[i].getItemNo() == itemNumber) {
return purchaseList[i];
}
else return 0;
}
}
}
答案 0 :(得分:1)
purchaseList[i]
有效。
使用List
个对象时,要检索i
个元素,必须调用List.get(int index)
方法。像这样:
purchaseList.get(i)
因此,您的方法必须重构为:
public Purchase getPurchase(int itemNumber) {
for(int i = 0; i < purchaseList.size(); i++) {
if(purchaseList.get(i).getItemNo() == itemNumber) {
return purchaseList.get(i);
}
else return 0;
}
}
此外,为了避免从Object
投射到Purchase
,您必须使List
通用。
private List<Purchase> purchaseList = new ArrayList<Purchase>();
这样编译器将确保您添加到列表中的对象的类型为Purchase
,并且不会强制您在获取时将它们强制转换为特定的对象。
答案 1 :(得分:0)
您的getPurchase()
方法逻辑不正确。在不满足第一个条件后,您不应退出。
尝试更改它:
// Change the declaration like this
private List<Purchase> purchaseList = new ArrayList<Purchase>();
// And change the method like this:
public Purchase getPurchase(int itemNumber) {
for(Purchase purchase : purchaseList) {
if(purchase.getItemNo() == itemNumber) {
return purchase;
}
}
return null;
}
同样recordItem()
和getPurchase()
看起来不属于Purchase
类。
答案 2 :(得分:0)
将您的purchaseList[i].getItemNo()
更改为purchaseList.get(i).getItemNo()