【问题标题】:Is there a way to perform a goto function in Java? [duplicate]有没有办法在 Java 中执行 goto 函数? [复制]
【发布时间】:2013-08-12 07:07:46
【问题描述】:

我知道 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;
        }
    }
}

【问题讨论】:

  • 我认为您应该解释一下您要打印的内容,这样会更容易找到更好的解决方案

标签: java goto


【解决方案1】:

你可以这样做

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 '*'");

【讨论】:

  • 我在这里学到了一些东西:我错误地认为你只能打破封闭循环,而不是任意封闭块。您可能需要稍微详细说明这一点!
  • func(i) 是做什么的?打印“print '*'”后会进入内部for循环吗?
  • func() 只是一个任意的布尔条件——不管它是什么。
  • 你的例子没有做我的代码打算做的事!
  • @VarunJ 你能把你的代码改得更清楚吗?我读不懂你的心思。 ;)
【解决方案2】:

您可以使用continue 在代码中移动到不同的标签:

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);
    }
}

输出:

I am here
j: 0
j: 1
I am here
I am here
temp = 1

但是我不建议你这样做。有更简洁的方法可以做到这一点,因为James Gosling 创建了支持 goto 语句的原始 JVM,但后来他删除了这个不需要的特性。不需要 goto 的主要原因是它通常可以替换为更易读的语句(如 break/continue)或将一段代码提取到方法中。

来源:James Gosling, Q&A session

【讨论】:

    【解决方案3】:

    是的,但是没有使用 goto 是有原因的。它是可怕的。但是,如果您只是好奇,这里有一种方法:

    http://www.steike.com/code/useless/java-goto/

    如果您想以适当的方式做到这一点,请提出您真正的问题并说明您的最终目标,以便我们帮助您设计它。 :)

    【讨论】:

    • 这令人印象深刻:)
    • 我只想移动代码的其他部分,而不是将代码分成不同的“方法”。就像 C 中的 goto 一样
    猜你喜欢
    • 2010-09-19
    • 2020-02-14
    • 2011-07-13
    • 2021-10-20
    • 1970-01-01
    • 2018-07-30
    • 2018-09-23
    • 2021-01-08
    • 2018-02-04
    相关资源
    最近更新 更多