Rompecabezas de bucle infinito en Java

Problema 1 : inserte código en los segmentos de código dados para que el bucle sea infinito.

clase GFG
{
public static void main(String s[]){

/*Insertar codigo aqui*/

for (int i = inicio; i <= inicio + 1; i++) { /* Bucle infinito */ } } }

Solución:
parece que debería ejecutarse solo durante dos iteraciones, pero se puede hacer que se repita indefinidamente aprovechando el comportamiento de desbordamiento.
Integer.MAX_VALUE es el valor máximo que un int puede almacenar en Java. Cuando llego a Integer.MAX_VALUE y se incrementa, se ajusta silenciosamente a Integer.MIN_VALUE. Entonces, podemos declarar que la variable comienza con 1 menos que el valor máximo.
La siguiente es la solución:

clase GFG
{
public static void main(String s[]){

int inicio = Integer.MAX_VALUE-1;
for (int i = inicio; i <= inicio + 1; i++) { /* Bucle infinito */ } } }

En esto, start=2147483645 (Integer.MAX_VALUE-1), y el valor es 2147483645, 2147483646, -2147483648, -2147483647…….. y así sucesivamente.

Problema 2 Inserte código en los segmentos de código dados para que el bucle sea infinito.

clase GFG
{
public static void main(String s[]) {

/*Insertar codigo aqui*/

while (i <= j && j <= i && i != j) { /* Bucle infinito */ } } }

Solución:
hasta la versión 5.0, los operadores de comparación numérica de Java (=) requerían que ambos operandos fueran de un tipo numérico primitivo (byte, char, short, int, long, float o double). En la versión 5.0, la especificación se cambió para decir que el tipo de cada operando debe poder convertirse en un tipo numérico primitivo. Ahí está el problema.
En la versión 5.0, se agregaron al idioma autoboxing y auto-unboxing . Estamos usando esto en lo siguiente:

class GFG
{
public static void main(String s[]){
Integer i = new Integer(0);
Entero j = nuevo Entero (0);
while (i <= j && j <= i && i != j) { /* Bucle infinito */ } } }

Las dos primeras subexpresiones (i <= j y j <= i) realizan conversiones de unboxing en i y j y comparan numéricamente los valores int resultantes. Tanto i como j representan 0, por lo que ambas subexpresiones se evalúan como verdaderas. La tercera subexpresión (i != j) realiza una comparación de identidad en las referencias de objeto i y j. Las dos variables se refieren a objetos distintos, ya que cada uno se inicializó en una nueva instancia de Integer. Por lo tanto, la tercera subexpresión también se evalúa como verdadera y el ciclo gira para siempre.

Este artículo es una contribución de Shubham Juneja . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *