Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > 制御文 −3.break、continue、return
更新日:2005/7/25
制御文−3.break、continue、return
Javaでのbreak文、continue文、return文について説明します。
break文
break文によりswitch、for、while、do whileの制御文を終了させることができます。break文にはラベル有りのものとラベル無しのものがあり、ラベル有りのものはそのラベルがつけられた制御文までを終了し、ラベル無しのものはbreak文のあるもっとも内側の制御文を終了します。ラベルはラベル名:の形で指定し、一般に終了させたい制御文の前に記載します。

※ラベルは各制御文の前だけでなく任意の場所に記載することができます。break文を実行した後、実行フローを任意の場所に移動させることができるのです。但し、設計が不十分な実行フロー形成を招きやすく推奨はされていません。
ラベル: 制御文 {
  break ラベル;
}
【例1】break文を使用した例です。
public class ExControl7 {
  public static void main(String[] args) {
    int[][] slot = {{ 4, 35, 63, 16, 50 },
                    { 59, 89, 12, 32, 9 }}; //(1)
    int award = 50;
    boolean judgment = false;

    bingo:   //(2)
    for (int i = 0; i < slot.length; i++) {   //(3)
      for (int j = 0; j < slot[i].length; j++) {   //(4)
        if (slot[i][j] == award ) {   //(5)
          judgment = true;   //(6)
          break bingo;   //(7)
        }
      }
    }

    if (judgment) {   //(8)
      System.out.println("当選です。");
    } else {
      System.out.println("落選です。");
    }
  }
}
【解説1】
(1). 2次元配列slotに値を代入します。
(2). break文のラベルbingoです。
(3). for文を使用し、2次元配列slotの中身を調べます。i < slot.lengthで2次元配列が終了するまで、forループを繰り返します。
(4). 内側のfor文ではj < slot[i].lengthでiで指定された配列要素内の配列が終了するまで、forループを繰り返します。
(5). 各配列要素の値が変数awardの値と等しいか比較します。
(6). 変数awardで等しい値が合った場合、変数judgmentに値trueを代入します。この場合は2次元配列の要素の一つである50と変数awardの値50が等しいため、値trueの代入を行います。
(7). 値trueの代入を行った後、forループを終了させるため、break文の実行を行います。(2)で指定されたラベルの位置までfor文を終了させます。
(8). 変数judgmentを判断し、trueであれば"当選です。"を表示します。この場合は、trueであるため、"当選です。"の表示を行います。
※. 2次元配列の詳細は2次元配列ページを参照してください。
【実行結果1】

D:\JAVA>javac ExControl7.java

D:\JAVA>java ExControl7
当選です。

D:\JAVA>

continue文
continue文はfor、while、do whileにおいてその後の処理をスキップさせ再び繰り返し処理の初めから実行させたい時に使用します。break文と同様に、ラベル有りのものとラベル無しのものがあります。
ラベル: 制御文 {
  continue ラベル;
}
【例2】continue文を使用した例です。
public class ExControl8 {
  public static void main(String[] args) {
    StringBuffer word = new StringBuffer("jeve");   //(1)
    int numWord = word.length();   //(2)
    int count = 0;

    for (int i = 0; i < numWord; i++) {   //(3)
      if( word.charAt(i) != 'e') {   //(4)
        continue;   //(5)
      }
      count++;   //(6)
      word.setCharAt(i, 'a');   //(7)
    }
    System.out.println("変更箇所は" + count + "個所です。");  //(8)
    System.out.println("jeveではなく" + word + "です。");  //(9)
  }
}
【解説2】
(1). 文字列"jeve"を持つ、StringBuffer型変数wordを生成します。
(2). 変数wordの文字列"jeve"の文字数をカウントし、変数numWordに代入します。lengthメソッドは保有する文字列の文字数を返すメソッドです。
(3). for文を使用し、wordが保有する文字列の1文字づつに対し処理を行います。i < numWordは文字列の終わりまでforループを繰り返すことを意味します。
(4). 文字列の各文字が'e'と等しくないか比較します。
(5). 文字列の各文字が'e'と等しくない場合はcontinue文を実行し、その後の処理をスキップさせ再びforループ処理を行います。等しい場合はcontinue文を実行せず、その後の処理を実行します。
(6). 文字列の各文字が'e'であった場合、変数countの値を1増加させます。
(7). 文字列の各文字が'e'であった場合、'e'を'a'に変換します。setCharAtメソッドは第1引数の値を第2引数の値に変換するメソッドです。
(8). for文終了後、値を変換した回数を表示します。
(9). 変換された文字列の値を表示します。
【実行結果2】

D:\JAVA>javac ExControl8.java

D:\JAVA>java ExControl8
変更箇所は2個所です。
jeveではなくjavaです。

D:\JAVA>

return文
return文は実行しているメソッドから抜け出す際に使用します。値を返すreturn文と値を返さないreturn文があり、値を返すreturn文を使用する際は実行するメソッドで適切な戻り値の型を設定する必要があります。voidなど戻り値を持たない(値を返さない)メソッドでは、値を返さないreturn文を使用します。値を返さないreturn文は省略可能です。
return 値;
【例3】return文を使用した例です。
public class ExControl9 {
  static float taxCal(int p) {
    float taxPrice = 0.05F * p;   //(3)
    return taxPrice;   //(4)
  }

  public static void main(String[] args) {
    int price = 100;   //(1)
    int tax = (int)taxCal(price);   //(2)
    int total = price + tax;   //(5)
    System.out.println("合計は" + total + "円です。");   //(6)
  }
}
【解説3】
(1). 変数priceに値100を代入します。
(2). 変数priceを引数にメソッドtaxCalを実行します。
(3). メソッドtaxCal内で、引数に設定された変数pと0.05を乗算し、演算結果を変数taxPriceに代入します。
(4). return文を実行し、メソッドtaxCalを終了します。その際、変数taxPriceの値をメソッド呼び出し元(2)へ返します。返された値は、int型にキャストされ変数taxに代入されます。
(5). 変数priceと変数taxを加算し、変数totalに値の代入を行います。
(6). printlnメソッドで、変数totalの表示を行います。
【実行結果3】

D:\JAVA>javac ExControl9.java

D:\JAVA>java ExControl9
合計は105円です。

D:\JAVA>

制御文
1.while、do while、for
2.if、switch
3.break、continue、return



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道