Si la condición puede ser verdadera o falsa, ¿por qué es necesaria?

Puedo confirmar que su código produce el mismo resultado con o sin negar la última parte de la condición y que produce resultados diferentes cuando se elimina la condición.

Esto puede parecer un milagro a menos que considere que la condición completa se evalúa en un bucle muchas veces y bien puede ser que los tres casos (con condición, con condición negada, sin condición) tengan formas diferentes de procesar y llegar a el resultado. Lo que intento decir es que con la condición y con la condición negada se alcanzan los mismos resultados pero de diferentes maneras .

Este es el caso aquí. Si introduce alguna depuración de printf en el bucle, verá que el resultado se alcanza de maneras completamente diferentes. La condición existente con negación permite que la condición completa se vuelva verdadera en otras iteraciones que la condición sin negación. Es pura casualidad (sin mirar más allá del algoritmo) que al final ambos conducen al mismo resultado.

Aquí es la traza de ejecución de número i, el resultado de la condición completa, y los valores intermedios de nums, seeny resulten este punto:

Sin la condición:

0 F [1, 1, 2] [0, 0, 0] []
0 T [1, 1, 2] [True, 0, 0] []
1 T [1, 1, 2] [True, 0, 0] []
2 F [1, 1, 2] [True, 0, 0] []
0 T [1, 1, 2] [True, 0, True] []
1 T [1, 1, 2] [True, 0, True] []
2 T [1, 1, 2] [True, 0, True] []
1 T [1, 1, 2] [False, 0, False] []
2 F [1, 1, 2] [False, 0, False] []
0 F [1, 1, 2] [False, 0, True] []
0 T [1, 1, 2] [True, 0, True] []
1 T [1, 1, 2] [True, 0, True] []
2 T [1, 1, 2] [True, 0, True] []
1 T [1, 1, 2] [False, 0, True] []
2 T [1, 1, 2] [False, 0, True] []

Con la condicion seen[i-1]:

0 F [1, 1, 2] [0, 0, 0] []
0 T [1, 1, 2] [True, 0, 0] []
1 T [1, 1, 2] [True, 0, 0] []
2 F [1, 1, 2] [True, 0, 0] []
0 T [1, 1, 2] [True, 0, True] []
1 T [1, 1, 2] [True, 0, True] []
2 T [1, 1, 2] [True, 0, True] []
1 F [1, 1, 2] [False, 0, False] []
0 F [1, 1, 2] [False, True, False] []
0 T [1, 1, 2] [True, True, False] []
1 T [1, 1, 2] [True, True, False] []
2 F [1, 1, 2] [True, True, False] []
1 T [1, 1, 2] [False, True, False] [[1, 1, 2]]
2 F [1, 1, 2] [False, True, False] [[1, 1, 2]]
0 F [1, 1, 2] [False, True, True] [[1, 1, 2]]
1 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]
2 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]
2 F [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]
0 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]
0 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
1 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
1 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]
0 F [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]
1 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
2 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
2 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]

Y con la condición negada !seen[i-1]:

0 F [1, 1, 2] [0, 0, 0] []
0 T [1, 1, 2] [True, 0, 0] []
1 F [1, 1, 2] [True, 0, 0] []
0 T [1, 1, 2] [True, True, 0] []
1 T [1, 1, 2] [True, True, 0] []
2 F [1, 1, 2] [True, True, 0] []
2 F [1, 1, 2] [True, False, False] [[1, 1, 2]]
0 T [1, 1, 2] [True, False, True] [[1, 1, 2]]
1 F [1, 1, 2] [True, False, True] [[1, 1, 2]]
2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
1 T [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]
2 F [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]
0 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]
0 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
1 F [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]
2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
1 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]
2 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]

Los pasos de ejecución son diferentes en los tres casos. Dos (por casualidad) tienen el mismo resultado.

Respuesta 1

Necesito usar Java Stream en este código, pero no sé cómo funciona con una lista vacía. Estoy tratando de encontrar algo así como un tiempo en Stream Java 8, pero no puedo encontrarlo. Lista estática pública <...

Necesito convertir String [] a Byte [] en Java. Esencialmente, tengo una cadena delimitada por espacios devuelta desde mi base de datos. He dividido con éxito esta cadena en una matriz de elementos de cadena, y ahora ...

Se supone que debo envolver mi clave privada RSA con el modo AESWrap (siguiendo RFC 3394). Sin embargo, recibo una excepción que dice "la longitud de la clave que debe ajustarse debe ser múltiplo de 8 bytes". Creo que esto es ...

Tengo <div id = top1> <div id topsub1> <ul class = "student"> <li> <a href="/thomas"> Tom </a> </li> </div> <div id topsub2 > ...