Оптимизация для: пока (верно) - PullRequest
4 голосов
/ 27 сентября 2019

Я использую цикл

while (true)
{
    if (x == y)
    {
        break;
    }
    else
    {
        //do stuff
    }
}

, например, кадр является просто примером кадра, так как сам код является запутанным и чрезмерно сложным, так как требует "break";заявление в нескольких разных областях для нескольких разных условий.Мой вопросЕсть ли способ написать оператор цикла без проверки цикла для условия вообще?Есть ли более эффективный способ написать бесконечный цикл, отличный от while (true)?

edit: (java)

edit2:

while (a < b)
{
    while (true)
    {
        if (c < d)
        {
            if (e == null)
            {
                //do alot of stuff
                break;
            }
            else
            {
                //do something
            }
        }
        else if (d > c)
        {
            if (e == null)
            {
                //do alot of stuff
                break;
            }
            else
            {
                //do something
            }
        }
        else if (d == c)
        {
            break;
        }
    }
    a = a + 1;
}

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Есть ли способ написать оператор цикла без проверки цикла на условие вообще?Есть ли более эффективный способ написать бесконечный цикл, отличный от while (true)?

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

  1. while (true) { ... }
  2. do { ... } while (true);
  3. for (;;) { ... }

В зависимости отФактический код может иметь смысл обратить "логику прерывания цикла" в "логику продолжения цикла", как в:

boolean continueLoop;
do {
    continueLoop = false;

    // ... do stuff ...

    if ( some condition ) {
        continueLoop = true;
    }

    // ... do stuff ...

} while (continueLoop);
0 голосов
/ 27 сентября 2019

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

Прочтите это для примеров: - https://en.wikipedia.org/wiki/Infinite_loop

0 голосов
/ 27 сентября 2019

В вашем конкретном примере вы можете переместить логику прерывания в операторе if в условие while:

while (x != y) {
    // do stuff
}

Фактически, если ваш исходный цикл while имел несколько условийдля взлома вы можете переместить их всех в состояние while, например

while (!cond1 && !cond2 ... ) {
    // execute
}
...