0

ちょっとみんな、ItemSet次のコードからアイテムを反復したり取得したりできません

品目クラス

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

    public Item returnItems(ItemSet itemset) {
        Item item=null;
        return item;
    }

}

ItemSet クラスはアイテムのリストを保持します

public  class ItemSet   {

    private List<Item> hold;

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

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

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

    public void addItems(Item item) {
        hold = new ArrayList<Item>();
        this.hold.add(item);
    }

}

これは私の Transaction クラスで、ItemSet のリストを保持しています

public class Transaction  {

    private List<ItemSet> trans;

    public ItemSet getUniqueItem() {
        ResultSet rs;
        Database d=new Database();
        ItemSet unique=new ItemSet();
        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.addItems(item);      
            } 
        } catch(Exception e) { 
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

そして、これが私のメインクラスです

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();    //11
    }
}

11 で ItemSet からアイテムを取得する方法がわかりません

使ってみた

foreach(Item i:I) {

}

しかし、私はエラーが発生しています。

4

4 に答える 4

2

'foreach'ステートメントを使用するには、クラスでインターフェースItemSetを実装する必要がありますjava.lang.Iterable

アップデート:

Iterableインターフェースの実装方法については、このSOの回答を参照してください

于 2012-08-31T19:17:18.690 に答える
2

を使用できるようにするfor (Item i : itemSet)には、クラスで反復可能なItemSetインターフェースを実装する必要があります。これを行うには、次のメソッドをクラスに追加します。ItemSet

public Iterator<Item> iterator() {
    return hold.iterator();
}

implements Iterable<Item>クラス宣言に追加する必要があることに注意してください。

いつでも使用できることに注意してくださいfor (Item i : itemSet.getItemSet())

于 2012-08-31T19:18:41.543 に答える
0

getUniqueItem()あなたのTransactionクラスのメソッドはインターフェースをItemSet実装していない を返します。を呼び出してから取得し、それを繰り返すIterable必要があります。List<Item>ItemSetgetItemSet()

ところで、getItemSet()はおそらくそのメソッドの素晴らしい名前ではないでしょうList<Item>

于 2012-08-31T19:19:44.623 に答える
0

あなたのコードはあまり意味がないと思いますし、誰もが Iterator インターフェイスを実装したい理由を真剣に理解していません。

まず、List を含むクラスに Set という名前を使用します。次に、 addItems()メソッドでList の新しいインスタンスを再作成します。これは、個々の項目をリストに追加する必要があるため、addItem()にする必要があります。

あなたがやっていることは、基本的にリストを作成してそこにアイテムを追加することですが、追加する次のアイテムはリストを再作成し、その参照を以前のリストの参照に割り当てて、効果的に削除します。したがって、リストに複数のアイテムが含まれることはありません。

リストをクラスの属性として持ちたい場合は、たとえばItemListのように直感的なクラスの名前を付けます。これは、アイテムのリストがあり、それがまさにそれであることがわかるからです。ただし、リストが 1 つしか含まれていない場合は、間にメソッド呼び出しを追加するだけなので、実際にはまったく必要ありません。List インターフェイスまたはそれを実装する任意のクラス (たとえば ArrayList など) を使用できます。

私はあなたのコードを取り、それが理にかなっているように書き直しました。それがあなたを助けることを願っています;)

public class Transaction  {

    public ItemList getUniqueItems() {

        Database d = new Database();
        ItemList unique = new ItemList();
        String query="Select id,name from item";
        ResultSet rs = d.sendQuery(query);
        try {  
            while(rs.next()) {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                unique.addItem(new Item(rs.getString(1),rs.getString(2)));      
            } 
        }
        catch(Exception e){
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

public class Ap {

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

        ItemList i = t.getUniqueItems();  
        List<Item> list = i.getItemList();
        list.get(10);    //11 because 0 counts also
    }
}

短いバージョンは次のようになります: 1: トランザクション クラス

public class Transaction  {

    public List<Item> getUniqueItems() {

        Database d = new Database();
        List<Item> unique = new ArrayList<Item>();

        String query="Select id,name from item";
        ResultSet rs = d.sendQuery(query);
        try {  
            while(rs.next()) {
                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
                unique.add(new Item(rs.getString(1),rs.getString(2)));      
            } 
        }
        catch(Exception e){
            System.out.print(e.getMessage());
        }
        return unique;
    }

}

2: Ap クラス:

public class Ap {

    public static void main(String args[]) {
        Transaction t  = new Transaction();
        List<Item> list = t.getUniqueItems();
        list.get(10);    //11 because 0 counts also

                // iteration with a foreach loop
                for (Item i : list) {
                   System.out.println(i);
                }

                // iteration with a for loop 
                for (int n = 0, s = list.size(); n < s; n++) {
                    System.out.println(list.get(n));
                }

                // iteration with a Iterator
                Iterator<Item> iterator = list.iterator();
                while (i.hasNext()) {
                    System.out.println(i.next());
                }
    }
}

したがって、どこにも Iterator インターフェースを実装する必要はまったくありません。

于 2012-08-31T19:31:08.580 に答える