我无法完成扑克牌的直接方法。我不明白为什么我的代码不起作用。
public static boolean containsStraight(int [] hand)
{
boolean straight = false;
for(int i = 0; i < 5; i++)
{
if (hand[i] == 2 && hand[i] == 3 && hand[i] == 4 && hand[i] == 5 && hand[i] == 6)
{
straight = true;
}
if (hand[i] == 3 && hand[i] == 4 && hand[i] == 5 && hand[i] == 6 && hand[i] == 7)
{
straight = true;
}
if (hand[i] == 4 && hand[i] == 5 && hand[i] == 6 && hand[i] == 7 && hand[i] == 8)
{
straight = true;
}
if (hand[i] == 5 && hand[i] == 6 && hand[i] == 7 && hand[i] == 8 && hand[i] == 9)
{
straight = true;
}
}
return straight;
}
答案 0 :(得分:2)
你说在每次迭代中,手[i]必须是2和3和4和5.这是不可能的。手中只有一个数字[i]。
答案 1 :(得分:0)
正如pL4Gu33在他的回答中所述,你的比较是错误的。从本质上讲,通过for循环的每一步都会使hand[i]
保持恒定值(例如,4)。这意味着你的if语句正在检查:
if(4 == 4 && 4 == 5 && 4 == 6 && 4 == 7 && 4 == 8) {
...
}
这将永远不会评估为true。如果您确定手中有五个元素并且手已经排序,那么可以做
if (hand[0] == 2 && hand[1] == 3 && hand[2] == 4 && hand[3] == 5 && hand[4] == 6) {
...
}
但是,我会给你一个更好的答案。
你应该做的第一件事是分手。一旦你这样做,很容易一步一步地检查手中的下一张牌是否正好比前一张牌大一张。如果你到了最后并且这是正确的,那么它就是直的。
/*
* You will need to import java.util.Arrays
*/
public boolean isStraight(int[] hand) {
if(hand == null || hand.length != 5) {
return false;
}
else {
// Automatically sort the hand
Arrays.sort(hand);
// Set the "previous" variable to a theoretically impossible value
int prev = -1;
// Iterate through the hand and see if the next card is exactly one more than
// the previous one.
for(int i = 0; i < hand.length; i++) {
// If prev is -1, then this is the first time through the for-loop
// If the card that we're on has a value of the previous card + 1,
// we still have the possibility of a straight.
if(prev == -1 || (prev + 1) == hand[i]) {
prev = hand[i];
}
else {
return false;
}
}
return true;
}
}
答案 2 :(得分:0)
问题是,您正在错误地使用循环,因为您始终在hand[i]
中检查同一张卡的值。我的建议是先做一个排序,或者如果你想提高效率,你可以使用第二个布尔字段,这表明你手中是否有一张给定值的卡片。这样你就可以轻松检查,如果你有成功的任意数量的卡。
public static boolean containsStraight(int[] cards) {
int count = 0;
boolean[] valueInHand = new boolean[10];
for (int card : cards) {
valueInHand[card] = true;
}
for (boolean value : valueInHand) {
if (value == true) {
count++;
} else {
count = 0;
}
// works for any number of cards
if (count == cards.length) {
return true;
}
}
return false;
}