那么,有没有一种方法可以简化它,使其变得更小?

else if(selectedCards.size() == 3
            && cardAt(selectedCards.get(0)).pointValue() + cardAt(selectedCards.get(1)).pointValue() + cardAt(selectedCards.get(2)).pointValue() == 0
            && !cardAt(selectedCards.get(0)).rank().equals(cardAt(selectedCards.get(1)).rank())
            && !cardAt(selectedCards.get(0)).rank().equals(cardAt(selectedCards.get(2)).rank())
            && !cardAt(selectedCards.get(1)).rank().equals(cardAt(selectedCards.get(2)).rank()))

最佳答案

从我可以看到的角度来看,您正在尝试测试3张卡的排名是否不同。一种更简单的测试方法是将它们放入集合中,并查看集合大小是否与所选集合相同。这可以缩放到任意数量的选定卡...

public boolean differentRanks(List<Integer> selectedCards) {
    Set<Integer> ranks = new HashSet<Integer>();
    for (int card : selectedCards) {
        ranks.add(cardAt(card).rank());
    }
    return ranks.size() == selectedCards.size();
}


我还将创建一种方法来汇总所选卡的积分...

public int sum(List<Integer> selectedCards) {
    int total;
    for (int card : selectedCards) {
        total += cardAt(card).pointValue();
    }
    return total;
}


这样情况就会结束

} else if (selectedCards.size() == 3 && sum(selectedCards) == 0 &&
           differentRanks(selectedCards) {

09-19 11:48