0

次のコードで同時変更例外エラーが発生します。

Iterator iterateBids = bidders.iterator();
     Person nextBidder;

bidders.add(bid.getBidder());

if (highestBid == null) {
    // There is no previous bid.
    highestBid = bid;
    while (iterateBids.hasNext()) {
        //nextBidder = (Person) iterateBids.next();
        ((Person) iterateBids.next()).bidUpdate(this, bid);
    }
    return true;
} else if (bid.getValue() > highestBid.getValue()) {
    // The bid is better than the previous one.
    highestBid = bid;
    while (iterateBids.hasNext()) {
        nextBidder = (Person) iterateBids.next();
        nextBidder.bidUpdate(this, bid);
    }
    return true;
}

bidders は Person を含む HashSet です。「nextBidder = (Person) iterateBids.next();」でエラーが発生 コードは、現在の入札額よりも高い入札額を探します。より高い場合は、入札者セットを繰り返し処理し、bidUpdate() メソッドを実行します。

変更と反復を同時に行うにはどうすればよいですか?

4

2 に答える 2

6

私が見ることができる唯一のことは、この行の前にイテレータを取得することです:

 bidders.add( bid.getBidder() );

...これは明らかに の変更biddersです。

于 2013-03-30T02:01:30.077 に答える
5

1 行目でイテレータを取得した後:

Iterator iterateBids = bidders.iterator();

4 行目でデータ構造を変更しています。

bidders.add( bid.getBidder() );
于 2013-03-30T02:02:21.730 に答える