java - uso - Cómo usar la instrucción goto correctamente




java uso de break (5)

Como ya se señaló en todas las respuestas, goto : una palabra reservada en Java que no se usa en el idioma.

restart: se llama un identificador seguido de dos puntos.

Aquí hay algunas cosas que debe tener en cuenta si desea lograr similar comportamiento similar :

outer:                  // Should be placed exactly before the loop
loopingConstructOne  {  // We can have statements before the outer but not inbetween the label and the loop          
    inner:
    loopingConstructTwo {
        continue;       // This goes to the top of loopingConstructTwo and continue.
        break;          // This breaks out of loopingConstructTwo.
        continue outer; // This goes to the outer label and reenters loopingConstructOne.
        break outer;    // This breaks out of the loopingConstructOne.
        continue inner; // This will behave similar to continue.
        break inner;    // This will behave similar to break.
    }
}

No estoy seguro de si debo decir algo similar lo que ya tengo.

Estoy tomando mi clase de ciencias de computación AP de la escuela secundaria.

Decidí lanzar un goto en uno de nuestros laboratorios solo para jugar, pero recibí este error.

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error on token "goto", assert expected
    restart cannot be resolved to a variable
at Chapter_3.Lab03_Chapter3.Factorial.main(Factorial.java:28)

Fui a una pregunta goto en Stackoverflow para averiguar cómo hacerlo correctamente, e hice exactamente lo que se demostró en una de las respuestas. Realmente no entiendo por qué el compilador quiere una declaración de afirmación (al menos eso es lo que supongo que quiere), ni tengo idea de cómo usar assert . Parece que quiere reiniciar la parte de goto restart; es una variable, pero reiniciar es solo una etiqueta que hace que el programa vuelva a la línea 10 para que el usuario pueda ingresar un int válido. Si quiere que el reinicio sea una variable, ¿cómo lo hago?

import java.util.*;

public class Factorial 
{
    public static void main(String[] args) 
    {
        int x = 1;
        int factValue = 1;
        Scanner userInput = new Scanner(System.in);
        restart:
        System.out.println("Please enter a nonzero, nonnegative value to be factorialized.");
        int factInput = userInput.nextInt();

        while(factInput<=0)
        {
            System.out.println("Enter a nonzero, nonnegative value to be factorialized.");
            factInput = userInput.nextInt();
        }

        if(x<1)//This is another way of doing what the above while loop does, I just wanted to have some fun.
        {
            System.out.println("The number you entered is not valid. Please try again.");
            goto restart;
        }
        while(x<=factInput)
        {
            factValue*=x;
            x++;
        }
        System.out.println(factInput+"! = "+factValue);
        userInput.close();
    }
}

Java no admite goto , se reserva como palabra clave en caso de que quisieran agregarla a una versión posterior


La lista de palabras clave de Java especifica la palabra clave goto, pero está marcada como "no utilizada".

Esto probablemente se hizo en caso de que se agregara a una versión posterior de Java.

Si goto no estuviera en la lista, y se agregara al idioma más adelante, el código existente que usaba la palabra goto como un identificador (nombre de variable, nombre de método, etc.) se rompería. Pero debido a que goto es una palabra clave, dicho código ni siquiera se compilará en el presente, y aún es posible hacer que haga algo más adelante, sin romper el código existente.


No hay 'goto' en el mundo de Java. La razón principal fue que los desarrolladores se dieron cuenta de que los códigos complejos que habían pasado a Goto llevaban a hacer que el código fuera realmente patético y que sería casi imposible mejorar o mantener el código.

Sin embargo, este código podría modificarse un poco y, utilizando el concepto de continuar y romper, podríamos hacer que el código funcione.

    import java.util.*;

public class Factorial 
{
    public static void main(String[] args) 
    {
        int x = 1;
        int factValue = 1;
        Scanner userInput = new Scanner(System.in);
        restart: while(true){
        System.out.println("Please enter a nonzero, nonnegative value to be factorialized.");
        int factInput = userInput.nextInt();

        while(factInput<=0)
        {
            System.out.println("Enter a nonzero, nonnegative value to be factorialized.");
            factInput = userInput.nextInt();
        }

        if(x<1)//This is another way of doing what the above while loop does, I just wanted to have some fun.
        {
            System.out.println("The number you entered is not valid. Please try again.");
            continue restart;
        }
        while(x<=factInput)
        {
            factValue*=x;
            x++;
        }
        System.out.println(factInput+"! = "+factValue);
        userInput.close();
        break restart;
}
    }
}

goto no hace nada en Java.





goto