15

資格取得のための勉強で忙しく、今まで聞いたことのない概念、「ラベル付きステートメント」に出くわしました。例えば:

「ラベル」:「ステートメント」

L1: while(i < 0){
     L2: System.out.println(i);
}

だから私の質問は..なぜですか?これはどのように便利で、いつこのようなものを使いたいのでしょうか?

4

6 に答える 6

25

私が知っている唯一の用途は、breakorcontinueステートメントでラベルを使用できることです。したがって、ネストされたループがある場合は、一度に複数のレベルから抜け出す方法です。

OUTER: for (x : xList) {
          for (y : yList) {
              // Do something, then:
              if (x > y) {
                  // This goes to the next iteration of x, whereas a standard
                  // "continue" would go to the next iteration of y
                  continue OUTER;
              }
          }
       }

例が示すように、ネストされた方法で一度に 2 つのことを反復している場合 (一致を検索するなど)、続行したい場合、または通常の反復を行っているが、何らかの理由でネストされたforループで中断/継続します。

ただし、数年に一度しか使用しない傾向があります。めったに使用されない構造であるため、理解するのが難しいという点で鶏と卵があります。そのため、別の方法でコードを明確に記述できる場合は、ラベルの使用を避けます。

于 2012-08-22T10:17:32.200 に答える
21

「見つかりません」フラグの必要性を回避するために使用できます。

FOUND: {
  for(Type t: list)
     if (t.isTrue())
        break FOUND;

  // handle not found.
}

これはおそらくラベルの誤用ですが、ラベルを使用してループなしで中断できます。

LABEL: {
    if(condition)
       break LABEL;
    // do something
}

また、人々を混乱させるためにも使用される可能性があるため、避けるべき十分な理由です。;)

http://www.google.com
while(true) break http;
于 2012-08-22T10:45:16.223 に答える
2

breakこれは、残りの返信で見落とされる可能性が高い過度の例です。switch{} ステートメント内でループを中断できます。

loop: for(;;){
  int c=in.read();
  switch(c){
  case -1:
  case '\n':
    break loop;
  case 'a':
    processACommand();
    break;
  case ...
  default:
    break;
  }

}
于 2012-08-22T10:51:21.907 に答える
2

私はそれらをコメント ステートメントとして使用していました :) 冗談はさておき、これは基本的な Go to ステートメントのようなもので、コード行にジャンプすることができます。つまり、深いループ構造の最中に...

使用法:

scan: {
      int c;
      for (firstUpper = 0 ;
          firstUpper < count ;
          firstUpper += Character.charCount(c)) {
        c = codePointAt(firstUpper);
        if (c != Character.toLowerCase(c)) {
          break scan;
        }
      }
      return this;
    }
于 2012-08-22T10:21:30.803 に答える
2

Javaを書きながらFortranを書くために必要だと思います。それらがなければ、本物のプログラマー がどの言語を使っていようともFortran で書いた格言は無効になる可能性があります。

于 2012-08-22T10:18:43.120 に答える
0

他の回答が述べているように、ラベルは Java 言語のほとんど使用されない部分です。

しかし、あなたの場合、他のいくつかのことを考慮する必要があります:

  • ラベルは非常に「一般的」で、実際には行番号です: L1L2、 ...

  • ラベルはコードでは使用されません。

  • あなたは認定のための教材を勉強しています。

これはL1L2ラベルが単なる行番号であることを意味します。コードを説明するテキストはその行番号を参照していると思います。同様に、一部の本や論文では、テキスト内で参照するため、または引用を容易にするために、すべての数学用語を列挙しています。

于 2012-08-25T13:00:39.220 に答える