sirve - java sentencia continue
Cómo usar la instrucción goto correctamente (7)
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
Java tampoco utiliza números de línea, lo que es una necesidad para una función GOTO. A diferencia de C / C ++, Java no tiene una instrucción goto, pero java admite la etiqueta. El único lugar donde una etiqueta es útil en Java es justo antes de las declaraciones de bucle anidadas. Podemos especificar el nombre de la etiqueta con ruptura para romper un bucle externo específico.
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;
}
}
}
Si miras hacia arriba continúa y rompe aceptan una "Etiqueta". Experimenta con eso. Goto en sí no funcionará.
public class BreakContinueWithLabel {
public static void main(String args[]) {
int[] numbers= new int[]{100,18,21,30};
//Outer loop checks if number is multiple of 2
OUTER: //outer label
for(int i = 0; i<numbers.length; i++){
if(i % 2 == 0){
System.out.println("Odd number: " + i +
", continue from OUTER label");
continue OUTER;
}
INNER:
for(int j = 0; j<numbers.length; j++){
System.out.println("Even number: " + i +
", break from INNER label");
break INNER;
}
}
}
}
goto
no hace nada en Java.