我目前正在尝试实施名为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);
}
}
答案 0 :(得分:5)
您希望使用this
关键字来调用其他构造函数。
e.g。
case 24: this(10, Suit.HEARTS); break;
此外,请务必在每个案例结尾处break;
。
编辑:这不起作用,如下面的评论中所示。将此逻辑移动到您从构造函数调用的私有方法中,或使用静态工厂方法替换第二个构造函数。
答案 1 :(得分:2)
使用静态初始化程序:
public static Bid create(int pIndex) {
switch (pIndex) {
case 0: return Bid(6, Suit.SPADES);
case 1: return Bid(6, Suit.CLUBS);
...
}
答案 2 :(得分:1)
“Bid(int,Card.Suit)方法未定义为Bid类型” 那就对了!没有使用该签名的方法 - Bid(int,Card.Suit)是构造函数。 (我可以说,因为访问修饰符和名称之间缺少返回类型或关键字 void )
要从另一个构建函数调用构造函数,请使用关键字 this 而不是类名。并且对另一个构造函数(或超级构造函数)的调用必须是第一个语句,因此编码它时的开关将不起作用。
3。 您可能希望使用静态初始化程序来创建Bids地图,例如(另):
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);
}