Java - 扫描ArrayList中的项目

时间:2014-11-23 11:13:36

标签: java arraylist

我有一个创建'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;
    }
}
}

3 个答案:

答案 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()