0
PriorityQueue<Player> playerQueue = new PriorityQueue<Player>(30,
                new Comparator<Player>( ) {
                    // overriding the compare method
                    public int compare(Player i, Player j) {
                        return (int)i.playerPrice() < (int)j.playerPrice() ? -1 : ((int)i.playerPrice() == (int)j.playerPrice()) ? 0 : 1;
                    }
                }
          );

        for(Player a:XMLParserViaSax.getListOfPlayers()){
            System.out.println(a.getName()+ "-->"+a.playerPrice());
        }

        for(Player player:XMLParserViaSax.getListOfPlayers()){
            playerQueue.add(player);
        }
        //playerQueue.addAll(XMLParserViaSax.getListOfPlayers());

        System.out.println("**************************");
        for(Player j:playerQueue){
            System.out.println(j.getName()+ "-->"+j.playerPrice());
        }

Player を playerprice で並べ替えようとしていますが、Player class.playerPrice() には playerprice として変数がありません。これは player.so の価格を計算するメソッドです。これらの Player オブジェクトを並べ替えようとすると、私にランダムな順序を与えます。

プレーヤー クラス内に playerprice プライベート メンバーを 1 つ持つ必要がありますか? ' Player クラスは次のようになります。

public class Player {

    private String name;
    private int battingStrength;
    private int bowlingStrength;
    private int fieldingStrength;
    private int keepingStrength;
    private int jerseyNumber;

    public int playerStrength() {
    return AuctionPlayerHelper.calculateStrength(this);
    }

    public boolean canKeepWickets() {
    return (keepingStrength == 10);
    }

    public boolean isForeignPlayer(){
    return AuctionPlayerHelper.isForeignPlayer(this.jerseyNumber);
    }

    public double playerPrice() {
     return AuctionPlayerHelper.calculatePrice(this);

    }

    //getters,setters
}

'

4

1 に答える 1

1

PriorityQueue APIからのメモ:

メソッド iterator() で提供される Iterator は、優先キューの要素を特定の順序でトラバースすることは保証されていません。順序付けされたトラバーサルが必要な場合は、Arrays.sort(pq.toArray()) の使用を検討してください。

したがって、実行している Queue を反復処理しても、「順番」にはなりません。

キューを呼び出すときなど、キューからヘッドを削除すると、優先順位が明らかになりpoll()ます。

于 2012-07-09T03:18:30.293 に答える