找到五对中的对

时间:2010-12-04 20:33:10

标签: java

我在查找大小为五的字符串时遇到问题。因此,只能有两对。对于我找到的每一对,我应该将得分提高2分。 这是我到目前为止所做的,但它是不正确的。

  String  temp = "4 5 4 3 3";
  String  tempLine = temp.replaceAll(" ", "");
  String[]  hand = temp.split(" ");
        for(int i = 0; i < hand.length; i++)
                  {

                      if(hand[i].equals(tempLine.substring(0, 1)) && i !=0 )
                          score += 1;
                      if(hand[i].equals(tempLine.substring(1, 2)) && i != 1 )
                          score += 1;
                      if(hand[i].equals(tempLine.substring(2, 3)) && i!= 2 )
                          score += 1;
                      if(hand[i].equals(tempLine.substring(3, 4)) && i!= 3)
                          score += 1;
                      if(hand[i].equals(tempLine.substring(4)) && i != 4)
                          score += 1;

                  }

编辑:我试图在手中找到具有相似值的对,例如4将是此手中找到的一对

5 个答案:

答案 0 :(得分:2)

首先对手进行排序,然后循环寻找hand [i] == hand [i-1]。请注意,你可能需要稍微聪明一点才能计算两次3s或4s的数量,但这应该可以让你开始。

答案 1 :(得分:2)

创建一个实际的Hand课程,不要使用String来代表您的卡片。 Card的等级和套装适合enum

class Card {
  enum Suite { ... };
  enum Rank { ... };

  private final Suite s;
  private final Rank r;

  // ...
}

class Hand {
  private Card[] cards;
  // ...
}

然后对Card[]课程中的Hand进行排序,以便更轻松地进行评估。

查看Oracle的enum教程,其中有一个卡片示例:http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html

答案 2 :(得分:1)

我认为这符合您的目标。

char[] hand = {'a','b','c','b','c'};
/* sort the hand to ensure pairs are next to each other */
for(int x=0;x<hand.length - 1;x++){
    for(int y=(x+1);y<hand.length;y++){
        if((int)hand[x] > (int)hand[y]){
            char temp = hand[y];
            hand[y] = hand[x];
            hand[x] = temp;
        }
    }
}
int score = 0;
for(int x=0;x<hand.length - 1;x++){
    if(hand[x] == hand[x + 1]){
        score++;
        /*if you want to make sure you only get pairs
          add an "x++;" that way it'll skip over the 
          letter you just tested*/
    }
}

答案 3 :(得分:0)

1)为什么不将手数组的元素与其他元素进行比较?您已经完成了解释字符串并创建数组数据的工作;用它。

2)有更多可能的元素对。在电脑前连续放下五个相似的物体并亲自试一试。你应该能够确定十对。您还应该能够识别出如何查找/标记对的模式。

答案 4 :(得分:0)

以下示例是如何计算对的一种可能性。问题是如果字符串或数组中有三个相等的值或者其他什么,它应该如何表现(增加分数)。这应该算三对还是不计算......?

123 is in fact three combinations 12 && 13 && 23
111 is in fact three combinations 11 && 11 && 11


package edu.harris.pairs;

public class FindPairs {

  public static void main(String[] args) {
    String s = "hello";
    int score = 0;
    for (int i = 0; i < s.length() - 1; i++) {
      for (int j = i + 1; j < s.length(); j++) {
        if (s.charAt(i) == s.charAt(j)) {
          score++;
        }
      }
    }
    System.out.println(score);
  }

}


希望这有点帮助。