1. ホーム
  2. java

[解決済み] javaでジャンプする方法

2022-02-17 01:03:30

質問内容

私は次のようなコードを持っています。

public class Test
{

    public static void main(String[] args)
    {
        continue s;
        System.out.println("I am not supposed to print this");
        s:
        System.out.println("I am suppose to print this");

    }
}

エラーが表示される

java: undefined label: s

どうしたんですか?

解決方法は?

基本的に、Javaでそれを行う実用的な方法はありません。 あなたは、"goto"と同等のことをしようとしているようですが、それはJavaではサポートされていません。 その break labelcontinue label 文は を囲む のラベルが付いたステートメントです。

さて、Javaの形式文法に従えば、こう書けるはずだ。

  s: {
      continue s;
      System.out.println("I am not supposed to print this");
  }
  System.out.println("I am suppose to print this");

が、その 今も は、2つの理由でコンパイルできません。

  • continueはループ文のラベルにしか分岐できない。 (A break はその制約がないのですが ......)

  • continue (または break ) は次の文に到達できないようにします。

こちらもご覧ください。 Javaにおけるgoto文の代替となるもの


しかし、あなたのコードを "work"にするためには、1つだけかなりトリッキーな方法があります。

  static final boolean flag = true;  // class attribute ...

  ...

  s: {
      if (flag) break s;
      System.out.println("I am not supposed to print this");
  }
  System.out.println("I am suppose to print this");

はコンパイラによって評価されます。 break は事実上無条件です。 しかし、JLSでは、最初の println になります。 として扱われます。 到達可能なコードエラーにならないようにするためです。

この かもしれない があれば便利です。 生成 このソースコード それ以外では、(IMO)単なる好奇心です。 このようなことを行うには、通常の if / else ステートメントを使用するか、最初の "print" を完全に削除してください。