如何在循环中使用多个条件来比较字符串的不同索引?

时间:2016-09-29 19:56:54

标签: java

所以我有这个迷你项目,我正在为自己工作,基本上它是一个简单的方法在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吗?或者有更有效的方法可以做到这一点吗? 非常感谢。

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;
}