0

我目前正在尝试实现一款名为 500 的纸牌游戏。

在这里,我试图将每种可能的出价类型编入一个简单的索引号。我已经为另一个班级的西装创建了枚举。我现在遇到的问题是我不断收到错误

“方法 Bid(int, Card.Suit) 未为 Bid 类型定义”。

我不明白为什么会这样。任何帮助,将不胜感激。

public Bid(int pTricks, Suit pSuit)
{
    assert pTricks >= 6;
    assert pTricks <= 10;
    this.trickCount = pTricks;
    this.trumpSuit = pSuit;
}


public Bid(int pIndex)
{

    switch (pIndex) {
    case 0: Bid(6, Suit.SPADES);
    case 1: Bid(6, Suit.CLUBS);
    case 2: Bid(6, Suit.DIAMONDS);
    case 3: Bid(6, Suit.HEARTS);
    case 4: Bid(6, null);
    case 5: Bid(7, Suit.SPADES);
    case 6: Bid(7, Suit.CLUBS);
    case 7: Bid(7, Suit.DIAMONDS);
    case 8: Bid(7, Suit.HEARTS);
    case 9: Bid(7, null);
    case 10: Bid(8, Suit.SPADES);
    case 11: Bid(8, Suit.CLUBS);
    case 12: Bid(8, Suit.DIAMONDS);
    case 13: Bid(8, Suit.HEARTS);
    case 14: Bid(8, null);
    case 15: Bid(9, Suit.SPADES);
    case 16: Bid(9, Suit.CLUBS);
    case 17: Bid(9, Suit.DIAMONDS);
    case 18: Bid(9, Suit.HEARTS);
    case 19: Bid(9, null);
    case 20: Bid(10, Suit.SPADES);
    case 21: Bid(10, Suit.CLUBS);
    case 22: Bid(10, Suit.DIAMONDS);
    case 23: Bid(10, Suit.HEARTS);
    case 24: Bid(10, null);

    }


}
4

3 回答 3

5

您想使用this关键字来调用另一个构造函数。

例如

case 24: this(10, Suit.HEARTS); break;

另外,请确保break;在每个案例结束时都有。

编辑:这不起作用,如下面的评论所示。将此逻辑移动到您从构造函数调用的私有方法中,或使用静态工厂方法替换第二个构造函数。

于 2012-09-27T18:59:22.113 回答
2

使用静态初始化器:

public static Bid create(int pIndex) {
    switch (pIndex) {
    case 0: return Bid(6, Suit.SPADES);
    case 1: return Bid(6, Suit.CLUBS);
    ...
}
于 2012-09-27T19:19:26.253 回答
1
  1. “Bid 类型的方法 Bid(int, Card.Suit) 未定义” 没错!没有具有该签名的方法 - Bid(int, Card.Suit) 是一个构造函数。(我可以说,因为访问修饰符和名称之间缺少返回类型或关键字void )

  2. 要从另一个构造函数调用构造函数,请使用关键字this而不是类名。并且对另一个构造函数(或超级构造函数)的调用必须是第一条语句,因此您编写的开关将不起作用。

3. 您可能希望使用静态初始化程序来创建投标地图,例如(未经测试):

private static Map<Integer, Bid> bids = new HashMap<Integer, Bid>();

{
    bids.put(0, new Bid(6, Suit.SPADES));
    // ...
}

然后访问地图:

public Bid getBidByIndex(int pIndex) {
    return bids.get(pIndex);
}
于 2012-09-27T19:36:46.537 回答