Трудно сказать, не видя всей проблемы, которую вы пытаетесь решить. Но если схема этих тестов очень однородна, вы можете попробовать различные подходы. Например,
switch (regionBx.getSelectedItem() + ":" +
seasonBx.getSelectedItem() + ":" +
mealBx.getSelectedItem()) {
case "Tokyo:Spring:Nul":
travelCost = tokyo + (tokyo * sphotel) + (tokyo * spflight);
break;
...
}
Или:
String[][] criteria = new String[][]{
{"Tokyo", "Spring", "Nul"},
...
};
IntSupplier[] computations = new IntSupplier[] {
() -> tokyo + (tokyo * sphotel) + (tokyo * spflight),
...
};
String region = regionBx.getSelectedItem();
String season = seasonBx.getSelectedItem();
String meal = mealBx.getSelectedItem();
for (int i = 0; i < criteria.length; i++) {
if (region.equals(criteria[i][0]) &&
season.equals(criteria[i][1]) &&
meal.equals(criteria[i][2])) {
travelCost = computations[i]();
break;
}
}
(я не уверен, что синтаксис 2-й версии у меня совершенно правильный. Прокомментируйте или отредактируйте.)
Если вы можете express вычислить как формулу, основанную на ограниченном наборе факторов, которые можно посмотреть на картах, см. @ Steyrix's answer .
Однако это не ясно, что результат будет лучше (более читабельным / более понятным), чем версия с большим количеством if
тестов.
И вряд ли они будут более эффективными.
Моя личная рекомендация будет использовать if
тесты в первой версии и тратить усилия на «полировку» кода, только если метод расширяется до сотен строк кода.