如何在Java中更改通过方法参数使用的方法

时间:2018-03-15 21:01:52

标签: java

我正在用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;
                }
            }
        }
    }
}

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

正如已经建议的那样 - 使用Comparator<Card>是解决问题的正确方法。

这是Comparator and Comparable的一个非常好的介绍教程。

这是一个关于如何design deck of cards in Java的非常详尽的设计评论。它包括比较器示例,以及其他良好的OOP设计点。