2015-11-03 51 views
-1

我有一個撲克程序,在那個程序中我有方法檢查數組中是否有四種。如何查看數組是否具有4個相同的值。 Java

public boolean isFourOfAKind(Card[] arr){} 

我通過抓住每個卡值,2-14 ARR []改變爲int數組,並將它們存儲在一個單獨的陣列。如何檢查(高效)4個整數是否與該陣列相同?

*注意:我傳遞的7張牌

數組

我的兩對方法(通過請求)

/* 
    * Returns 0 if no two pairs 
    * else returns the highest card out of the two pairs, 
    * if two hands have the same highest pair then further inspection is needed 
    */ 
    public static int isTwoPair(Card[] arr){ 
     int hold[] = new int[5]; 
     int values[] = new int[arr.length]; 
     int max = 0; 
     boolean total = false; 
     for(int i=0;i<arr.length;i++){ 
      values[i] = arr[i].getValue(); 
     } 
     for(int i = 0;i<values.length;i++){ 
      for(int j = 0;j<values.length;j++){ 
       if(i==j){ 
        continue; 
       } 
       if(values[i]==values[j]){ 
        if(values[i]>max){ 
         max = values[i]; 
        } 
        int hold1 =0; 
        int hold2=0; 

        hold1 = j; 
        hold2=i; 
        int counter = 0; 
        for(int ii = 0;ii<values.length;ii++){ 
         if(ii==j||ii==i){ 
          continue; 
         } 
         hold[counter] = values[ii]; 
         counter++; 

        } 
        //      for(int iii: hold){ 
        //      System.out.print(" , "+ iii); 
        //      } 
        //      System.out.println(); 
        if(isPair(hold)==0){ 
         max = 0; 
         total = false; 
        }else{ 
         int holdInt = isPair(hold); 
         if(holdInt>max){ 
          max = holdInt; 
         } 
         total = true; 
        } 
       } 
      } 
     } 
     return max; 

    } 
+0

你如何檢查兩種? – dognose

回答

2

我寧願做這樣的:

public boolean isFourOfAKind(Card[] arr){ 
    int[] counts = new int[15]; 
    for (Card c: arr) { 
     counts[c.cardNum]++; 
     if (counts[c.nameOfTheFieldWithCardNumber] == 4) return true; 
    } 
    return false; 
} 

你也可以很容易地修改這種方法來檢查2/3的一種/滿屋組合

+0

我甚至沒有考慮這個。這是一個很好的方法。 – bpgeck

+0

這是一個很好的通用方法。如果你可以忍受你永遠只能評估5張牌的限制,只需使用直接比較和提前退貨,就可以節省大量時間。 –

+0

@LeeDanielCrocker你可以發佈優化的5卡牌手的解決方案嗎? –

0

如果你排序ar射線通過等級(23,...,KingAce),然後進行以下檢查都變得輕鬆了許多:

  • Straight flush(遞增等級,與Flush檢查相結合)
  • Four of a kind(的4同級別分組在一起)
  • Full house(第一2相等和最後2相等和中等等於其中之一)
  • Straight(遞增排序)
  • Three of a kind
  • One pair(2組合在一起相同的秩的)
  • High card(最後卡)

  • Two pair(2組相同的秩的)(組合在一起的相同等級的3)唯一不受益的是Flush,並且檢查它不需要任何排序,所以這不是問題。

  • 相關問題