Это будет один вариант:
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())).equals(cardAt(selectedCards.get(2)).rank()))
Чтобы сделать более читаемым это условие вы могли бы сделать что-то вроде этого:
//here you extract the values you need only once and use them in your condition block below
int cardsSize = selectedCards.size();
int pointValue0 = cardsSize == 3 ? cardAt(selectedCards.get(0)).pointValue() : 0;
int pointValue1 = cardsSize == 3 ? cardAt(selectedCards.get(1)).pointValue() : 0;
int pointValue2 = cardsSize == 3 ? cardAt(selectedCards.get(2)).pointValue() : 0;
bool rankEquals = CompareRanks(cardAt(selectedCards.get(0)),cardAt(selectedCards.get(1)),cardAt(selectedCards.get(2));
if (<condition>) {
//block of sentences
} else if (cardsSize == 3 && (pointValue0 + pointValue1 + pointValue2) == 0 && !rankEquals)
Я предлагаю создание функции, называемой «CompareRanks», где вы получите 3 различных объектов (результат «cardAt»), и вы получить ранг там и сравнить, если значения одинаковые или нет.
Эта опция приводит вас к большему количеству строк кода, но более чистая и удобная для чтения для любого человека, кроме вас.
вы можете сделать метод [обратный булево], чтобы уменьшить коды 'cardAt (selectedCards.get (0)) ранг() равно (cardAt (selectedCards.get (1)). Rank()) ' –
Возможно, создайте функцию, которая выполняет эти проверки, назовите ее соответствующим образом и назовите ее в случае, если – beresfordt
. Возьмите любой из нижеприведенных ответов, чтобы решить вашу проблему? Вам нужна дополнительная информация? Пожалуйста, подумайте о том, чтобы принять ответ, http://stackoverflow.com/help/someone-answers – Adam