为什么我的方法只返回我的ArrayList中存在的重复项之一?

时间:2016-12-04 06:39:11

标签: java for-loop arraylist poker

我正在用Java创建一个扑克游戏,截至目前我正在尝试在ArrayList中找到重复的排名并打印它们。我的ArrayList(卡片)包含[“3c”,“3s”,“Ad”,“6h”,“7h”,“7s”]。当我使用我创建的方法时

String firstChar;

public void twoPair() {
        for(String t : cards) {
            char rank_index = t.charAt(0);
            firstChar = String.valueOf(rank_index);
        }
        for (String i : cards) {
            if (i.startsWith(firstChar)) System.out.println(i);
        }
    }

我得到了输出:

 7h
 7s

并且同样地,如果我添加另外7张牌(如7c),我将获得7张牌中的所有3张,

7h
7s
7c

但不是等级3卡(“3c”和“3s”)的重复。 https://github.com/aepries/A8-Poker

的完整代码

2 个答案:

答案 0 :(得分:1)

你需要一个嵌套循环,原始形式,它只会检查数组列表中的最后一个条目,即7,因此你会看到所有起始字符为7的元素。

您应该将代码更改为:

for(String t : cards) {
    char rank_index = t.charAt(0);//no need to convert to string
    for (String i : cards) {
        if (!i.equals(t) && i.charAt(0) == rank_index) 
            System.out.println(i);
    }
}

答案 1 :(得分:0)

第一个循环会将您的变量分配到7s,其中n-th值只会选择与7相关的值。我的解决方案看起来像一个点系统,我们只需要在每个字符中添加+1,任何小于1的值都不会被输出。

public static void main(String[] args) {

        List<String> cards = new ArrayList<>();
        cards.add("3c");
        cards.add("3s");
        cards.add("Ad");
        cards.add("6h");
        cards.add("7h");
        cards.add("7s");
        cards.add("7c");

        Map<Character, Integer> list = new HashMap<>();
        for (String card : cards) {
            char c = card.charAt(0);
            if (!list.containsKey(c)) {
                list.put(c, 0);
            } else {
                list.put(c, list.get(c) + 1);
            }
        }

        for (String card : cards) {
            char c = card.charAt(0);
            if(list.get(c) > 0){
                System.out.println(card);
            }
        }
    }

时间复杂度仅为O(n*2).