2017-08-10 27 views
-6
import java.util.Scanner; 
class testing 
{ 
    int i ; int j ; 
    Scanner sc = new Scanner(System.in) ; 
    void lolwa() 
    { 
     out: 
     for(i = 0 ; i <= 6 ; i++) 
     { 
      System.out.println(i); 
     } 
     System.out.println("Enter 1 to restart loop"); 
     System.out.println("Enter 2 to continue till 10"); 
     j = sc.nextInt(); 
     if(j == 1) 
     { 
      continue out ; 
     } 
     if(j == 2) 
     { 
      for(i = 7 ; i <= 10 ; i++) 
      { 
       System.out.println(i); 
      } 
     } 
    } 
} 

BlueJでコンパイルして、「Undefined label out」と表示されます。あなたのoutラベルは、forループこれを「アノテート」Labeled Continueステートメントがコンパイルに失敗する

+0

奇妙な質問:なぜcontinueを使うのではなく単に 'lolwa()'を呼び出してみませんか? – Nathan

+2

ラベルがすでに終わっているループが終了してから続行します。万が一、あなたの括弧を間違えたのですか? –

+4

コードを正しくインデントする必要があります。 - 'continue'はループ内にある必要があります。 – assylias

答えて

5

を私はちょうど文を継続使用して学んだので、私は問題を把握することはできません。

だから、
out: 
for(i = 0 ; i <= 6 ; i++) 
{ 
    System.out.println(i); 
} 

ラベルoutを継続するためには、それは希望for-loopの中での中でにする必要があります。 for-loopが終了した後で使用するのは意味がありません。例えば、次のようにコンパイルします。

out: 
for(int i = 0; i <= 6; i++) 
{ 
    System.out.println(i); 
    continue out; 
} 

この場合、ラベル付きのcontinue文は必要ありません。あいまいさはありません。 「継続」できるループは1つだけです。

Oracle tutorialはうまく説明しています。


ラベル付きの最後の使用を覚えていないことにも言及する価値があります。他の選択肢がほとんどない限り、私はそれらを避けるでしょう。

+2

私はそれがJSRコマンドの残りの部分(例えば、アセンブリ)からであると仮定できます。私は文字通り他の選択肢がないので、前にそれらを使用しました。 Javaのような高水準言語で論理フローを制御するためにラベルを使用するIMOは、事実上あらゆるケースで悪い設計を示しています。 – tnw

+0

代替(フラグ変数および/または重複チェック)が不必要にコードを複雑にするネストループの使用例は限られています。彼らはごくわずかです。 :-) –

+0

@マイケル私はあなたがなぜブレークステートメントでデモンストレーションしているのかわかりません。 TOは継続を使用しています。デモンストレーションは同じ方法ですが、それでもなおp – Nathan

1

私はあなたがcontinue labelを使用しないと思う:それはループで使用する必要があり、あなたの特定のラベルにジャンプするために使用されます。 ifステートメントはではなく、ループです。 lolwa()に電話してcontinue outを置き換えるだけで、あなたはあなたのファンクションの始めに送られます。

関連する問題