java - 如果有更好的方法在java中编写这个if语句

标签 java if-statement simplify

那么有没有办法简化这个以使其更小?

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) {

关于java - 如果有更好的方法在java中编写这个if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684388/

相关文章:

java - 读取制表符分隔的文本文件时出现问题?

Servlet 内的 Java Lambda 表达式

java - tomcat运行时上下文初始化失败

javascript - 如何添加以下代码中的数字?

python - 我怎样才能简化这个Python代码(书上的作业)?

mysql - 简化MySQL子查询

python - 删除冗余/压缩代码

java - @Scheduled 中的 Spring session 范围对象

javascript - 类内的 if 语句

c - 短路和可读性