1. ホーム
  2. java

[解決済み] javaコードでラベルを使用するには?

2022-01-30 05:29:57

質問事項

Javaコードでラベルにbreak文を使用する際にエラーが発生します。これは次のように表示されます。 undefined label . このようなコードの書き方は間違っています。正しい使い方を教えてください。よろしくお願いします。

 while (true)
          {
            label149: if (!localIterator2.hasNext());
            while (true)
            {
              i++;
              break;
              HashMap localHashMap2 = (HashMap)localIterator2.next();
              if (!((String)localHashMap1.get("name")).equalsIgnoreCase((String)localHashMap2.get("emotion")))
                break label149;
              if (!((String)localHashMap2.get("IS_paid")).equalsIgnoreCase("1"))
                break label246;
              ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "1");
            }
            label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");
          }

解決方法は?

A break というラベルは goto ステートメントを使用します。Javaには goto ステートメントを使用します。

ラベルは、その後に続く文をマークします。このラベルは、その文から抜け出すために使うことができ、その文からのみ抜け出すことができます。フローの制御は、常にラベルの付いたステートメントの最後に移行します。

では、ここにあるのは何でしょう?

        label149: if (!localIterator2.hasNext());

ifの後にセミコロンがあるので、実際にはこれがラベル付きステートメント全体となります。ですから、あなたの break label149 はその範囲に全く入っていません。もし、このセミコロンがなかったら if ブロックには while であり、次に break label149 は動作します。しかし、制御が while ブロックを作成します。

       label246: ((HashMap)Saved.this.keynamedata.get(i)).put("is_paid", "0");

これは、label246でマークされた文です。ここでも break label246 はその中に入っていないので、そのスコープには入っていません。そして、中に入っていないステートメントから抜け出すことはできません。