Задать вопрос
@MaximPython

Как в цикле реализовать проверку условия?

Приветствую, возникла сложность в написании кода, суть в том, что в цикле for содержится переменная str, которая может в себе содержать не ограниченное кол-во значений, но к примеру возьмем что у нас есть 2 значения, когда цикл прогоняет первое значение и значение подходит под условие, то цикл заканчивает свою работу, но мне нужно чтобы оба значения из str были проверены на это условие и только тогда срабатывала команда nextItemLore.add(ChatColor.GREEN + "Нажмите для улучшения!"); , также если одно из этих значений не подходит выводилась команда nextItemLore.add(ChatColor.RED + "Чего-то не хватает для повышения!"); . Пробовал убирать break, но все равно проверяется только одно значение и цикл работает правильно только если второе значение из str подходит под условие или оба условия не подходят

for (String str : main.instance.itemsConfig.getConfigurationSection(String.valueOf(newPath) + ".requirements.blocks").getKeys(false)) {
                        if (Blocks.getBlockBrokeAmount(p, str) >= main.instance.itemsConfig.getInt(String.valueOf(newPath) + ".requirements.blocks." + str) && main.econ.getBalance((OfflinePlayer) p) >= main.instance.itemsConfig.getConfigurationSection(newPath).getInt("price")) {
                            nextItemLore.add(ChatColor.GREEN + "Нажмите для улучшения!");
                            glass.setDurability((short) 5);
                            break;
                        } else {
                            glass.setDurability((short) 14);
                            nextItemLore.add(ChatColor.RED + "Чего-то не хватает для повышения!");
                            break;
                        }
                    }
  • Вопрос задан
  • 222 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
var booleans = List.of(true, false, true, false);

        var result = booleans.stream()
                .reduce((a, b) -> (a & b))
                .orElse(false);

Догадаетесь как получить из
main.instance.itemsConfig.getConfigurationSection(String.valueOf(newPath) + ".requirements.blocks").getKeys(false)
лист booleans ?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день
Чтобы не писать кучу if... else или switch ... case, можно попробовать использовать паттерн Chain Of Responsibility
https://refactoring.guru/ru/design-patterns/chain-...
Во-первых, код получится более лаконичным, а во-вторых, вы сможете реализовать то, что нужно.
Условно говоря, если код не проходит на проверку через опеределенный фильтр, то условие не выполняется, а если выполняется, то запрос проходит по цепочке дальше.
Ответ написан
runtycybin
@runtycybin
Java разработчик с 2017ого
советую как правильно подметил Dmitry Roo использовать Streams (от jdk 8 и выше) по скольку как Sonar так и Kiuwan на пример будут этому очень рады
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы