2014-10-29 65 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