所以我有这个迷你项目,我正在为自己工作,基本上它是一个简单的方法在java游戏,检查字符串是否有一个刷新。请记住,我是java(和卡片游戏/扑克......)的初学者,所以我对这一切都不熟悉。
e.g: 字符串是“”Kh3h7h8h2s“所以手是心之王,3心,7心,8心,黑桃2等等。等级是字符串的第1,第3,第5,第7,第9个索引。字符串需要有5个相同的等级才能有一个刷新
public class CardProblemss {
String hand = "Kh3h7h8h2h";
public boolean hasFlush(String hand) {
String suit1 = Character.toString(hand.charAt(1));
String suit2 = Character.toString(hand.charAt(3));
String suit3 = Character.toString(hand.charAt(5));
String suit4 = Character.toString(hand.charAt(7));
String suit5 = Character.toString(hand.charAt(9));
int flushcounter = 0;
while (true) {
if (suit1.equals(suit2)) {
flushcounter++;
}
else if (suit2.equals(suit3)) {
flushcounter++;
}
else if (suit3.equals(suit4)) {
flushcounter++;
}
else if (suit4.equals(suit5)) {
flushcounter++;
}
System.out.println(flushcounter);
if (flushcounter >= 5) {
return true;
}
else {
return false;
}
}
}
现在我已经可以告诉我的代码了。但我的问题是,我可以制定一个基本上使用charAt(索引)方法的循环吗?由于手的等级在索引1,3,5,7,9,我可以编写一个循环,每次运行时该方法的索引会增加2吗?或者有更有效的方法可以做到这一点吗? 非常感谢。
答案 0 :(得分:1)
这样的事情会起作用吗?
int flushCounter = 0;
char s = hand.charAt(1); // s for suite
for (int i = 3; i < hand.length(); i = i + 2) {
if (s == hand.charAt(i)) {
flushCounter++;
}
}
if (flushCounter >= 5) {
return true;
} else {
return false;
}
这样,你只需要遍历字符串然后在奇数值上进行迭代,就可以比较套件。我假设你的手牌尺寸总是3或更多。如果您希望i
从1开始,您也可以这样做。
int flushCounter = 0;
char s; // s for suite
for (int i = 1; i < hand.length(); i = i + 2) {
if (i == 1) {
s = hand.charAt(1);
} else if (s == hand.charAt(i)) {
flushCounter++;
}
}
if (flushCounter >= 5) {
return true;
} else {
return false;
}
对于后者,你必须注意不要在if语句中初始化s,否则它将超出范围,然后才能使用它。
注意:
if (flushCounter >= 5) {
return true;
} else {
return false;
}
可以缩减为
return flushCounter >= 5;
因为它会评估表达式然后返回结果。前一种方式更加冗长。由于您只是返回表达式的值,我认为后者更简单。
答案 1 :(得分:0)
只是为了好玩,这里有你如何用溪流做到这一点!
public static boolean hasFlush(final String hand) {
final char first = hand.charAt(1);
final long count = hand.chars().filter(c -> c == first).count();
return count == 5;
}