我正在用java做一个简单的扑克游戏,我目前正在玩这个游戏。当需要能够按照套装中的套装,价值和等级对玩家的套牌进行排序时,我想知道我是否可以通过一种方法完成所有操作而不使用if语句。我通过研究了解了java的反思,但我不确定它是否是我需要的,这对我来说很困惑。但是,我仍然有兴趣找到解决方案。
所以我想通过更改参数来改变排序方式,如下所示:
import java.lang.reflect.*;
public class BasicPlayer
{
// instance variables
Card[] myHand;
/**
* Constructor, places 5 cards in player's hand
*/
public BasicPlayer()
{
myHand = new Card[5];
for (int i = 0; i < 5; i++)
{
myHand[i] = new Card(i);
}
}
/**
* sort the deck by rank, suit, or value
*/
public void sort(String n)
{
Method m = Card.class.getDeclaredMethod("get"+n);
for (int i = 0; i < 52; i++)
{
for (int j = 0; i < 51; j++)
{
// prob not correct, unsure how to invoke method on object
// in array
if (m.invoke(myHand[j]) < m.invoke(myHand[j+1]))
{
Card t = myHand[j];
myHand[j] = myHand[j+1];
myHand[j+1] = t;
}
}
}
}
}
感谢您的回复!
答案 0 :(得分:0)
正如已经建议的那样 - 使用Comparator<Card>
是解决问题的正确方法。
这是Comparator and Comparable的一个非常好的介绍教程。
这是一个关于如何design deck of cards in Java的非常详尽的设计评论。它包括比较器示例,以及其他良好的OOP设计点。