那么有没有办法简化这个以使其更小?
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/