Java for loop con un loop while dentro

No entendí por qué en este código que calcula las potencias de 2, la e se disminuye dentro del ciclo while:

public class Power {
    public static void main (String [] args) {
        int e;
        int result;

        for (int i=0; i< 10; i++) {
            result = 1;
            e = i;
            while (e > 0) {
                result *= 2;
                e--;
            }
            System.out.println("2 to the " + i + " power is " + result);   
        }
    }
}

Si corro sin la e-- el código solo ejecuta la primera. Solo funciona con el e--.

Respuesta 1

Para comprender lo que está sucediendo, considere el bucle interno aislado de su bucle externo:

e = someNUmber;
while (e > 0) {
    result *= 2;
    e--;
}

El ciclo se detiene cuando ellega a cero. Es por eso que debe haber alguna operación dentro del cuerpo del bucle para cambiar el valor de eacercarse a cero.

Su ciclo es equivalente a este forciclo:

for (int e = someNumber ; e > 0 ; e--) {
    result *= 2;
}

El valor de ees su contador de bucles. Controla el número de iteraciones del bucle interno, asegurando que se ejecute exactamente las iveces.

Respuesta: 2

Es porque para calcular la potencia de 2 a i entonces tienes que multiplicar 2, i veces. Por lo tanto, cada vez que i (la potencia requerida de 2) se asigna a e y se reduce para que multiplique por i veces.

Respuesta: 3

Si observa lo que sucede para los primeros valores de i, queda claro:

i = 0

result = 1; // e = 0, result = 1

i = 1

result = 1;  // e = 1
result *= 2; // e = 0, result = 2

i = 2

result = 1;  // e = 2
result *= 2; // e = 1, result = 2
result *= 2; // e = 0, result = 4

i = 3

result = 1;  // e = 3
result *= 2; // e = 2, result = 2
result *= 2; // e = 1, result = 4
result *= 2; // e = 0, result = 8

El ciclo interno asegura que el resultado se multiplique por el número 2 iveces.

Una alternativa (posiblemente más clara) para el bucle interno y la evariable adicional sería:

for (int j = 0; j < i; j++) {
    result *= 2;
}
Respuesta: 4

Si corro sin la e-- el código solo ejecuta la primera.

En realidad, en este caso, su programa se atasca en bucle infinito

while (e > 0) {
    result *= 2;
}

Solo ve un resultado porque en la primera iteración de for loop ees igual 0que el programa no entra en while while

Respuesta: 5

Estoy usando el siguiente código para enviar datos a un servidor TCP. Supongo que necesito usar socket.shutdownOutput () para indicar correctamente que el cliente ha terminado de enviar la solicitud. Es mi suposición ...

Esto es lo que hago con eclipse: Crear un nuevo proyecto de Papyrus Crear un diagrama de clase en Papyrus Crear un nuevo proyecto vacío EMF Usar el Modelo de generador EMF para convertir mi archivo .uml (creado con ...

Actualmente soy nuevo en Java y no tengo experiencia previa en programación, actualmente estoy tratando de codificar una solución a un problema propuesto durante mi entrevista universitaria :) // Ganador variable de conejo para mantener ...

Creé un proyecto sin marcar (Crear plantilla de formulario de proyecto) y agregué una nueva clase llamada demo. pero cuando después de compilar, no pude ejecutar el código intellij no me mostró el resultado. "Editar configuración" ...