Как поместить тернарный оператор в скобки цикла for

Недавно я изучил тернарные операторы и практиковал их, делая старый код, который я написал некоторое время назад, более приятным. Пытаясь сделать это в цикле for разными способами, я не могу понять, как это сделать. Я пробовал:

for (hotbarFirst ? (x = 0; x < mc.player.inventoryContainer.getInventory().size(); x++) :
(x = mc.player.inventoryContainer.getInventory().size(); x > 0; x--)) {

и

for (hotbarFirst ? (x = 0) : (x = mc.player.inventoryContainer.getInventory().size());
hotbarFirst ? (x < mc.player.inventoryContainer.getInventory().size()) : (x > 0); 
hotbarFirst ? (x++) : (x--)){
                
            }

Первый способ дает мне unexpected token ошибок, а второй — not a statement ошибок. Кажется, я должен быть в состоянии сделать это так или иначе, так что я просто неправильно подхожу к этому или есть другой способ сделать это, не создавая два цикла for.

(не обращайте внимания на функции, они для игры, в которой я сделал мод)

(Кроме того, если вы не заметили, что я пытаюсь перебрать набор чисел два либо сзади вперед, либо спереди назад, в зависимости от того, является ли логическое значение истинным или ложным)

исходный код:

    public static int getItem(Item itemofChoice, boolean hotbarFirst) {
        if (mc.player == null) return -1;
        for (int x = 0; x < mc.player.inventoryContainer.getInventory().size(); x++) {
            if ((x == 0 || x == 5 || x == 6 || x == 7 || x == 8)) continue;
            ItemStack s = mc.player.inventoryContainer.getInventory().get(x);
            if (s.isEmpty()) continue;
            if (s.getItem().equals(itemofChoice)) return x;
        }
        return -1;

    }

Я пытаюсь заставить его повторяться в обратном порядке, если параметр bool истинен

конечно, ``` public static int getItem(Item itemofChoice, boolean hotbarFirst) { if (mc.player == null) return -1; for (int x = 0; x < mc.player.inventoryContainer.getInventory().size(); x++) { if ((x == 0 || x == 5 || x == 6 || x == 7 || х == 8)) продолжить; ItemStack s = mc.player.inventoryContainer.getInventory().get(x); если (s.isEmpty()) продолжить; если (s.getItem().equals(itemofChoice)) вернуть x; } вернуть -1; }``` Я хочу сделать так, чтобы hotbar first param он выполнялся в обратном порядке.

Arthur TeaTree 19.12.2020 11:02

@Sweeper ммм, это не совсем форматирование

Arthur TeaTree 19.12.2020 11:03

Я считаю, что ваш исходный код намного легче читать.

NomadMaker 19.12.2020 13:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
221
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один из способов сделать это:

int size = mc.player.inventoryContainer.getInventory().size();
for (int x = (hotbarFirst ? 0 : size-1); (hotbarFirst ? x < size : x >= 0) ; x += (hotbarFirst ? 1 : -1)) {
    ...
}

Ого, это то, что я пытался сделать во второй попытке, но это имеет больше смысла. Мне нравится то, что вы сделали с += и минусом. Большое спасибо за вашу помощь

Arthur TeaTree 19.12.2020 11:10

@ArthurTeaTree Я собирался опубликовать свой ответ с дополнительными пояснениями, но Андреас сделал это первым. Я не хочу повторять один и тот же ответ снова, поэтому я кратко объясню здесь. Причина, по которой ваши попытки не сработали, заключается в том, что тернарный оператор ожидает выражения в качестве своих операндов, а цикл for ожидает операторов до первого ; и после второго ;. Поэтому вам следует только переписать разные выражения в ваших двух циклах for в выражения троичного оператора, что и сделал ответ Андреа.

Sweeper 19.12.2020 11:15

@Sweeper Чтобы немного придраться: он ожидает «выражения выражений» , а не просто утверждения. Блок if также является оператором, но здесь он невозможен :P. Просто для справки также определение базового цикла for: docs.oracle.com/javase/specs/jls/se13/html/…

Tom 19.12.2020 11:21

@Sweeper, да, теперь я понимаю, как это работает, я научился, глядя на примеры в репозитории, поэтому у меня действительно не было хорошего понимания. Спасибо за вашу помощь.

Arthur TeaTree 19.12.2020 11:36

Другие вопросы по теме