我的问题是这是合理的逻辑,但执行不正确(提交服务器不会接受它)。所以我试图检查我的5张牌是否有一个直线(连续顺序为2,3,4,5,6等数字)然后如果第五张牌是ace,我希望它评价为值10因此它就像6 7 8 9 A(A的卡值为1)这是我当前的代码
public static boolean hasStraight(Card [] cards) {
boolean isTrue = false;
for(int atPos =0; atPos<cards.length-1; atPos++){
Card ogCard = cards[atPos];
Card notOgCard = cards[atPos+1];
if (ogCard.getValue() == (notOgCard.getValue()-1)){
if ((cards[3]).getValue()==9){
if (cards[4].getValue() ==1);
isTrue = true; //accounting for ace in last position
}
else if(ogCard.getValue() == (notOgCard.getValue()-1)){
isTrue = true; //accounting for ace not in first position
}
}
}
return isTrue;
}
这是我到目前为止还不确定下一步是什么。
答案 0 :(得分:1)
您的代码似乎走错了路。
首先将isTrue设置为false,然后将其设置为true 任何时间,阵列严格按顺序递增。因此,如果前两个是1,2,它将解决为真。 我会在开头将它设置为true,然后如果它们的数组不是按顺序增加则将其设为false。
你对ifs和ifs的构造也很有趣。
if ((cards[3]).getValue()==9){
行很可能永远不会按照您的意愿运行,因为ogCard.getValue() == (notOgCard.getValue()-1)
不为真(因此第二个if语句永远不会运行)在最后一个位置。我会删除wrap if语句,因为它并没有真正测试任何有用的东西。
您描述的方法也不能处理不在最后位置的有效A ..
我的推荐看起来像这样:
public static boolean hasStraight(Card [] cards) {
boolean isTrue = true;
for(int atPos =0; atPos<cards.length-1; atPos++){
Card ogCard = cards[atPos];
Card notOgCard = cards[atPos+1];
if (! (ogCard.getValue() == (notOgCard.getValue()-1) || (ogCard.getValue()==9&¬OgCard.getValue()==1) ) ) {
isTrue=false;
}
}
return isTrue;
}