Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Java中执行goto函数?_Java_Goto - Fatal编程技术网

有没有办法在Java中执行goto函数?

有没有办法在Java中执行goto函数?,java,goto,Java,Goto,我知道goto是一个在Java中没有任何用处的关键字。我可以使用标签或其他方式执行类似的操作,以移动到代码的不同部分吗 public static void main(String[] args) { for(int i=5; i>0; i--){ System.out.println(); first: for(int x=i; x<6; x++){ S

我知道goto是一个在Java中没有任何用处的关键字。我可以使用标签或其他方式执行类似的操作,以移动到代码的不同部分吗

    public static void main(String[] args) {
        for(int i=5; i>0; i--){
            System.out.println();

            first:
            for(int x=i; x<6; x++){
                System.out.print("*");
            }
        }
        System.out.println("print '*'");{
            break first;
        }
    }
}
你可以这样做

first: {
  for(int i=5; i>0; i--){
    System.out.println();
    if (func(i))
       break first;
    for(int x=i; x<6; x++){
        System.out.print("*");
    }
  }
}
System.out.println("print '*'");

是的,但不使用goto是有原因的。太可怕了。如果你只是好奇,这里有一个方法:

相反,如果你想以一种恰当的方式实现这一点,请提出你真正的问题并陈述你的最终目标,这样我们可以帮助你设计它

您可以使用“继续”移动到代码中的不同标签,如下所示:

public class Label {
    public static void main(String[] args) {
        int temp = 0;
        out: // label
        for (int i = 0; i < 3; ++i) {
            System.out.println("I am here");
            for (int j = 0; j < 20; ++j) {
                if(temp==0) {
                    System.out.println("j: " + j);
                    if (j == 1) {
                        temp = j;
                        continue out; // goto label "out"
                    }
                }
            }
        }
        System.out.println("temp = " + temp);
    }
}
但是我不建议你这么做。有更整洁的方法可以做到这一点,因为在支持goto语句的原始JVM中创建了这个特性,但随后他删除了这个不必要的特性。goto不必要的主要原因是,通常可以用更可读的语句(如break/continue)或将一段代码提取到方法中来替换它


来源:

我在这里学到了一些东西:我有一个错误的印象,你只能断开封闭的循环,而不能断开任意的封闭块。你可能想详细说明一下这一点!funci做什么?打印打印“*”后,它会进入内部for循环吗?func只是一个任意的布尔条件-它是什么并不重要。您的示例不符合我的代码的意图@VarunJ你能把你的代码修改得更清楚吗?我看不懂你的心思;这令人印象深刻:我只想进入代码的其他部分,而不想将代码划分为不同的“方法”。就像CI中的goto一样,我认为您应该详细解释您试图打印的内容,这样更容易找到更好的解决方案
I am here
j: 0
j: 1
I am here
I am here
temp = 1