因此,这里的前提是检查由五个“卡”组成的String数组,以查看给出了哪种手牌。手的类型是整数,数字越大表示手越好。这种特殊的代码段不是我写的,而是一个遇到麻烦的朋友,我找不到问题
int checkHand(String[][] Hand) {
boolean check = true;
for(int i = 0; i < 4; i++) {
if(!Hand[i][1].equals(Hand[i+1][1]))
check = false;
}
//check pair starts
for(int i = 0; i < 5; i++) {
for(int n = i + 1; n < 5; n++) {
if(Hand[i][0].equals(Hand[n][0])) {
BestCard = 1;//###OUTPUTS 1 FOR A PAIR###
temp = Hand[0];
Hand[0] = Hand[i];
Hand[i] = temp;
temp = Hand[1];
Hand[1] = Hand[n];
Hand[n] = temp;
//check three of a kind starts
for(int p = n + 1; p < 5; p++) {
if(Hand[i][0].equals(Hand[p][0])) {
temp = Hand[2];
Hand[2] = Hand[p];
Hand[p] = temp;
BestCard = 3; //Problem starts here- Output 3 for Three of a Kind
if(Hand[3][0].equals(Hand[4][0]))
BestCard = 6;//###OUTPUTS A 6 FOR A FULL HOUSE###
else if(Hand[2][0].equals(Hand[3][0])) {
BestCard = 7;
}
else if(Hand[2][0].equals(Hand[4][0])) {
temp = Hand[3];
Hand[3] = Hand[4];
Hand[4] = temp;
BestCard = 7;//###OUTPUTS A 7 FOR A FOUR OF A KIND###
}
}
}
}
}
}
if(check && BestCard<4)
BestCard = 5;//###OUTPUTS 5 FOR A FLUSH###
else if(check && BestCard == 4)
BestCard = 8;//###OUTPUTS 8 FOR A STRAIGHT FLUSH###
return BestCard;
}
运行时(还有很多其他功能,但这是我认为是问题区域),它可以确定所述手是成对的还是同花的。除此之外,它不会返回正确的数字。奇怪的是,语句中的所有其他内容都将运行-如果有三只被强制但未排序的牌,则该手牌将被重新排序为正确的牌。同样的情况也发生在四个这样的情况下。在更改BestCard的值时给出注释。 int BestCard和String [] temp已经初始化。
最佳答案
好吧,我发现了你的错误。
假设您的手是3 2 K 3 Q
你的i = 0所以n = 1和p = 2
在最初的循环中,什么都没有发生,
所以p经历了
然后第二遍,当p = 2时,您遇到了问题
第一行是
if(手i ==手p)
此时,手i = 3和手p = 3
但是您没有这种3,而您只有一对。
同样,一旦p for循环完成并且n = 2,程序将再次给出此错误,因为p会再次从3开始并返回您实际上只有一对的3。
我希望这有帮助。
我建议将它们每个都设为自己的for循环,而不是尝试一次全部完成,这样可以减少混乱,并且在您刚接触Java时更容易做到。
PS,您可能应该更改您的bestcard值,以便在没人对的情况下赢得高牌。