簡體   English   中英

如何在循環中使用多個條件來比較字符串的不同索引?

[英]How can I use several conditions in a loop to compare different indexes of a string?

所以我有一個我正在為自己工作的微型項目,基本上,這是java中的一種簡單的紙牌游戲方法,用於檢查字符串是否具有同花順。 請記住,我是Java(和cardgames / poker ...)的初學者,所以我對所有這些都是新手。

例如:字符串是““ 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(index)方法的循環? 由於手的等級在索引1,3,5,7,9,我可以編寫一個循環,使每次運行該方法的索引增加2嗎? 還是有一種更有效的方法可以做到這一點? 非常感謝。

這樣的事情行嗎?

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;

因為它將對表達式求值,然后返回結果。 前一種方法更為冗長。 由於您只是返回表達式的值,因此我認為后者更簡單。

只是為了好玩,這是如何使用流來做到這一點!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM