2014-10-29 66 views
1

說我有一個函數foo,帶有一些參數。在這個函數中,我生成一個類型爲Move的數組m。我現在需要對這個數組進行排序。好的,我打出了Arrays.sort(m,Comparator(){...}。但是等等,我想用來比較兩個動作的函數需要考慮到foo的參數,但比較器的比較函數可以只需要移動類型的兩個參數!見以下爲我想要做的代碼。Java:使用外部參數對數組進行排序

public int compare (Move m1, Move m2, Game g, int id) { 
    return g.evaluate(m1, g, id) - g.evaluate(m2, g, id); 
} 


public int foo (Game g, int id) { 
    Move[] m = ... ; 

    ??? 

    // m is now sorted by compare(move1, move2, g, id) 
} 

我沒有進入遊戲類本身,所以我不能只是編輯解決我的問題。該。比較級似乎無法做到這一點有什麼辦法在Java中真正做到這一點

+0

你可以創建一個圍繞遊戲的包裝,然後使用比較器對其進行排序。 – StackFlowed 2014-10-29 20:04:13

+2

製作一個使用'Game'和'int'構造的MoveComparator類,並將它們存儲爲實例變量。然後MoveComparator可以比較它使用已經具有的'Game'和'int'傳遞的兩個'Move'。 – 2014-10-29 20:04:59

+0

您可以繼承比較器併爲其提供參數,而不是使用匿名比較器。然後在你正在做比較的實現中,你可以使用這些值。 – mkobit 2014-10-29 20:05:15

回答

4

建立自己的比較:

public MyComparator implements Comparator<Move> 
{ 

    private Game game; 
    private int id; 

    public MyComparator(Game g, int id) 
    { 
     this.game = g; 
     this.id = id; 
    } 

    // compare function, using game and I'd 
} 

這樣使用:

Move[] m = ... ; 
Arrays.sort(m, new MyComparator(aGame, and)); 
+0

工作,謝謝! – frostedsky 2014-10-29 20:25:04