0

我有这个项目类

public class Item {

    private String id; 
    private int count;
    private String  name;


    public int getcount() {
        return this.count; 
    }

    public Item(String name) {
        this.name=name;
        this.id = "";
    }

    public Item(String id, String name) {
        this.name=name;
        this.id=id;
    }

    public Item(int count) {
        this.count=count;
    }

    public String getItemName() {
        return this.name;
    }

    public String getItemId() {
        return this.id;
    }

}

然后我有 ItemSet 类,它将包含项目列表

public  class ItemSet  extends ArrayList<Item> {

    private List<Item> hold;

    ItemSet(Item item) {
        this.hold.add(item);
    }

    ItemSet() {
        //throw new UnsupportedOperationException("Not yet implemented");
    }


    public List<Item> getItemSet() {
        return this.hold;
    }
}

我有将包含 ItemSets 列表的事务类:

public class Transaction extends ArrayList<ItemSet> {

    // ArrayList<String> l;
    public ItemSet getUniqueItem() {
        ResultSet rs;
        Database d=new Database();
        ItemSet unique=new ItemSet();
        unique.clear();
        String query="Select id,name from item";
        rs=d.sendQuery(query);
        try{  
            while(rs.next()) {
                //System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                Item item=new Item(rs.getString(1),rs.getString(2));
                unique.add(item);        
            } 
        }catch(Exception e){
            System.out.print(e.getMessage());
        }

        for(Item item:unique) {
            // System.out.println(item.getItemId()+": "+item.getItemName());
        }
        return unique;
    }

    public int countItems(ItemSet itemset) {
        ResultSet rs;
        Database d=new Database();
        String query="";
        int count=0;
        for(Item i:itemset) {
            String id=i.getItemId();
            query="SELECT count(*) FROM `item_transaction` where item_id="+i;
            rs=d.sendQuery(query);
            try {
                while(rs.next()) {
                    //System.out.print(rs.getString(1));
                    count=Integer.parseInt(rs.getString(1));
                    System.out.print(count+"\t");
                }
            }catch(Exception e){ }
        }

        return count;
    }

}

这是主要课程

public class Ap {

    public static void main(String args[]) {
        Transaction t=new Transaction();
        Transaction Ci=new Transaction();
        Transaction Li=new Transaction();

        ItemSet I=t.getUniqueItem();
        for(Item i:I) {
            System.out.println(i);
            ItemSet itemSet=new ItemSet(i);
            Ci.add(itemSet);
        }

        for(ItemSet itemSet:Ci) {
            int x=t.countItems(itemSet);
            System.out.print(x+"\t");
        }

        /* Iterator iter=Li.iterator();
           while(iter.hasNext()) {
               // System.out.print(iter.next()+"\t");
           }
        */

    }
}

问题是我越来越

Exception in thread "main" java.lang.NullPointerException
at ItemSet.<init>(ItemSet.java:25)
at Ap.main(Ap.java:30)

在哪里

ItemSet.java:25this.hold.add(item);

和在哪里

Ap.java:30ItemSet itemSet=new ItemSet(i); // creating new ItemSet

请帮我找出我的错误。

4

3 回答 3

5
this.hold.add(item); 

hold (List)默认null是因为实例变量。您需要在添加项目之前实例化。您对null结果执行的任何操作NullPointerException

例子:

ItemSet(Item item)
{
   hold = new ArrayList<Item>();
   this.hold.add(item);

}

任何延期的具体理由ArrayList()?

于 2012-08-31T18:28:50.840 回答
2

尝试这个:

private List<Item> hold = new ArrayList<Item>();

课堂内ItemList

到目前为止你所写的只是一个私有字段定义——你没有实例化hold对象(即你没有创建一个列表)所以hold是空的,因此是 NPE。

于 2012-08-31T18:29:18.593 回答
1

在使用它之前,您还没有初始化, hold List...

使用下面的代码ItemSet来初始化hold.

private List<Item> hold = new ArrayList<Item>();

于 2012-08-31T18:33:52.647 回答