2017-10-06 8 views
0

continue文を追加して、現在の繰り返しを終了し、ループ本体の残りの文が実行されないようにしました。私は{}を追加した場合、私はエラーになりますなぜJavaのcontinue文

public class Main { 
    public static void main(String[] args) { 
     int sum = 0; 
     int number = 0; 
     while (number < 20) { 
      number++; 
      if (number == 10 || number == 11) 
       continue; 
      sum += number; 
     } 
     System.out.println(sum); 
    } 
} 

私は理解できない事がありますか?

public class Main { 
    public static void main(String[] args) { 
     int sum = 0; 
     int number = 0; 
     while (number < 20) { 
      number++; 
      if (number == 10 || number == 11) { 
       continue; 
       sum += number; 
      } 
     } 
     System.out.println(sum); 
    } 
} 

エラー

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unreachable code 

    at Main.main(Main.java:18) 
+0

明らかです。 sum + = numberに達することはできません。 – duffymo

+0

@duffymo私は論理を理解したい –

+1

あなたはそれを書いた方法でどのようにその線に到達しますか?続行がどのように機能するか知っていますか?続行するとどうなりますか? – duffymo

答えて

2

これは動作します。

if (number == 10 || number == 11) { 
    continue; 
} 
sum += number; 

あなたifステートメントに{}を追加しない説明は、次の行のみが考慮されます。そのため、あなたは{}

+0

明確な説明をありがとう –

1

ため、continue文は、あなたのブランチで最終的なもので外sum += numberを残しておく必要があります(間{})、その次の文(合計+ =数)は決して実行されません。あなたのIDEはそれを警告しなければならないので、それはそれをコンパイルしなかったし、あなたはエラーを持っています。

if (number == 10 || number == 11) { 
     continue; 
} 
sum += number; 

sum += numberは限り式がfalseあるとして、到達可能である:あなたの最初のブロック、あなたが効果的に書いた{ずに一

+0

ありがとうございました –

1

。第二に

あなたが実際に書いた:sum += number

if (number == 10 || number == 11) { 
     continue; 
     sum += number; 
} 

。式がtrueの場合はcontinueのためにスキップされ、式がfalseの場合はブロックステートメントにないため実行されないため、到達不能になっています。

+0

ありがとうございました –

1

他の回答が正しく述べられているように、if文の後には最初のコード行のみが実行されます。しかし、もう1つのルールは、ifステートメントで "continue"ステートメントの後にコード行を追加することができないということです。それは本当にエラーです。 "sum + = number;"を切り替えるコードを微調整する必要があった場合続行すると、同じエラーは表示されません。お役に立てれば。

関連する問題