我正在开发一款扑克游戏。到目前为止,我一直停留在比较扑克手牌上。我有点知道如何去做,但我不确定我的代码有什么问题。有人可以指出问题所在吗?
那么让我简要描述一下我的代码在做什么。
程序的另一部分将遍历我手中的牌,并在数组中列出牌值的频率。
h = Hearts
c = Clubs
d = Diamonds
s = Spades
d4 = 4 of Diamond
所以让我们说我手里有 c3, h4, d4, s4, 2d 我将调用我程序的另一部分来读取我手中的卡片并返回一个计数数组。上面我手牌的计数数组将是 [0,0,1,1,3,0,0,0,0,0,0,0,0,0] 所以这个数组几乎就是说我的手有一个2,一个3,三个4。
现在这是我尝试找到同类三的方法,它应该为满堂返回 false(即同类三加一对)
public boolean hasThreeOfAKind() {
int [] temp;
temp = this.getCounts();
for (int i = 0; i< temp.length; i++){
if (temp [i] == 3 ){
for (int j = 0; j < temp.length ; j++)
if ( temp [j] != 2){
return true;
}
}
}return false;
所以我在上面尝试做的是首先,我遍历数组,如果有任何 3。如果有 3,我再次遍历数组,看看是否有 2。如果没有2,那我就知道是3了。如果有 2,那么它是满堂,我应该返回 false。我认为我的逻辑是正确的,但是我的代码有问题。
我遇到麻烦的第二只手是如何确定我的手是否正好有一对。如果只有一对,它只会返回 true。如果有两对等,则返回 false。
public boolean hasOnePair() {
int [] temp;
temp = this.getCounts();
for (int i = 0; i< temp.length; i++){
if (temp [i] == 2 ){
return true;
}
}return false;
对于这个,我正在考虑按降序或升序对数组中的值进行排序。如果我选择降序,我先读取数组,看是否有2,然后我可以扫描下一个,看第一个2之后的下一个值是否也是2。如果还有2,那么它会返回错误。
有人可以看看我的代码并指出问题所在吗?非常感谢。
最佳答案
您为什么要使用如此低级的原语?您有没有使用完整的 Card 类的原因?您的代码会简单得多。
class Card
enum Value {
TWO,
...
ACE
};
enum Suit {
SPADES,
...
CLUBS
};
private Suit suit;
private Value value;
public Card(Suit suit, Value value) {
this.suit = suit;
this.value = value;
}
}
public class Hand {
private final List<Card> cards;
public Hand(Card first, Card second, Card third, Card fourth, Card fifth) {
// add to cards list.
// sort ascending by value
}
public boolean hasThreeOfAKind() {
for (int i = 0; i < 3; i++) {
Value firstValue = cards.get(i).getValue();
Value secondValue = cards.get(i+1).getValue();
Value thirdValue = cards.get(i+2).getValue();
if (firstValue == secondValue && secondValue == thirdValue) {
return true;
}
}
return false;
}
}
这并没有直接回答你的问题,但在我看来,这种代码比只涉及整数的代码更具可读性和可维护性,并且更容易调试。 Java 不是 C,将它当作 C 对待并不会真正让您受益匪浅。
关于java - 比较Java中的扑克手牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359781/