Проверка условия внутри цикла

Если «флаг» верен, я должен выполнить шаг №. 1 иначе пропустите. Есть ли способ пропустить эту ненужную повторяющуюся проверку внутри цикла. (Поскольку значение флага не меняется во время выполнения цикла)

private void method(boolean flag) {
        while (man > woman) {
            if (flag) {
                // Step no. 1
                System.out.println(flag);
            }
        }
    }

person Vishal    schedule 15.11.2009    source источник
comment
Из предоставленной информации. непонятно, что вы пытаетесь сделать. Можете ли вы уточнить?   -  person cschol    schedule 15.11.2009
comment
Единственный способ пропустить проверку — создать два цикла, один с шагом, другой без него.   -  person Ast Derek    schedule 15.11.2009
comment
для меня это подозрительно похоже на домашнюю работу... Вишал, почему бы тебе не опубликовать настоящую проблему, над которой ты работаешь, и что ты думаешь по этому поводу...   -  person Kevin Day    schedule 16.11.2009


Ответы (4)


Я не уверен, что продуктивно беспокоиться об оптимизации на этом уровне. Как правило, важнее заставить программу работать и перейти к следующей проблеме.

При этом существует оптимизация под названием отключение цикла, что некоторые компиляторы сделают за вас. Они дублируют цикл, один раз с условным оператором и один раз без него, и перемещают условный оператор наружу, чтобы выбрать цикл. (В вашем примере вы можете сделать весь цикл условным, но я предполагаю, что это просто артефакт упрощения для переполнения стека.)

Но это еще одна причина не слишком беспокоиться об оптимизации, по крайней мере, до тех пор, пока у вас нет профиля и вы не знаете, что эта область кода отвечает за обнаруживаемое количество времени выполнения.

Тем не менее, лучше всего писать код как можно чище, и разгадывание таких проблем научит вас хорошим вещам...

На самом деле меня тоже беспокоят условные операторы, не зависящие от циклов. Я не верю, что есть общий ответ. Есть причудливые ответы, включающие функции более высокого порядка или лямбда-выражения, ответы «оставить это компилятору», ответы на рефакторинг всей внешней рутины ... Я в целом одобряю все, что делает код меньше. Вы должны расставить приоритеты, чтобы различать...

person DigitalRoss    schedule 15.11.2009

Это зависит от области действия do. Если do всегда истинно, вам не нужно проверять его, и вы можете удалить if (do). Нет причин устанавливать переменную в true, если она всегда будет true. Каков охват?

person Brandon G    schedule 15.11.2009

Если значение do изменяется в любой момент цикла, вы должны проверять его каждый раз, если только вы не переписали код так, чтобы do == true состояние обрабатывается вне текущего цикла (возможно, в меньшем цикле; это зависит от того, что вы пытаетесь сделать [без каламбура]).

person Michael Todd    schedule 15.11.2009

while (man > woman) {

Остерегайтесь бесконечных циклов здесь :-)

person Vincent Robert    schedule 15.11.2009