Pregunta

Tengo un bucle do- while dentro de una función que se parece a esto:

do
{
    // a bunch of stuff
    if (something < something else)
    {
        return true;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return false;
        }
        else
        {
              return true;
         }
     }
} while (condition);

Mi problema aquí es con el condition al final.La única forma en que puedo realizar un seguimiento de esto sería declarar una variable booleana antes del ciclo y establecer su valor para que coincida con el return valorar y tener la while() verifique eso después de cada iteración.Si bien esto funcionaría, me parece bastante poco elegante y me preguntaba si había alguna manera de tener el while() aprovechar el return valor en su lugar.

¿Fue útil?

Solución

Suponiendo que su código es incorrecto debido a que intentó parafrasearlo, esto es lo que debe hacer para satisfacer sus necesidades de que la devolución sea la misma que la while();

Para otros, este código a continuación tiene una lógica incorrecta, pero estoy tratando de mantenerlo en el pseudocódigo similar que utilizó.Básicamente, si desea que el while imite el valor de retorno, necesita el ! de la devolución para que la condición salga.

do
{
    // a bunch of stuff
    if (something < something else)
    {
        return !condition;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return condition;
        }
        else
        {
              return !condition;
        }
    }
} while (condition);

Otros consejos

No está claro cómo se ve su condición.De todos modos, probablemente quieras un bucle infinito:

for (; ;) {
    … your code here …
}

o:

while (true) {
    … your code here …
}

Este bucle nunca se detendrá por sí solo... pero como lo sales usando return esto no es un problema.

Podrías simplemente decir

 do
{
    // a bunch of stuff
    if (something < something else)
    {
        return true;
    }
    else if (stuff > other stuff)
    {
        if (something != other stuff)
        {
             return false;
        }
        else
        {
              return true;
         }
     }
     else if(exit_condition)
      break;
} while (1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top