第3回Java勉強会

概要

(Java言語プログラミングレッスン(上)のP.84以降の内容です。)

条件分岐とは(制御文)

条件分岐の説明

比較演算子

条件式、比較演算子

if文

if、if~else if~elseの使用方法

switch文

switchの使用方法

三項演算子

詳細

条件分岐とは(制御文)

プログラムを組む上でさまざまな機能を盛り込んでいくことになります。そこで無くてはならないのがこの条件分岐というものです。
これはプログラムの流れを制御するといった意味で制御文制御ステートメントと言います。

自動販売機を例に処理を考えてみます。
利用者120円の飲み物を買うためにお金を入れて商品のボタンを押すところを想定します。

  1. 利用者は120円入れました
    1. 投入された金額が商品の金額と同じです。
      1. 商品を出します。
      2. 終了します。
  2. 利用者は200円入れました
    1. 投入された金額が商品の金額より多いです。
      1. 商品を出します。
      2. お釣りを出します。
      3. 終了します。

「AとBが同じならならば処理1を行う」、「AとBが同じでなければ処理2を行う」、「AがBよりも大きければ処理3を行う」などといった処理の分岐を行うために使用します。
その時の判定材料として変数の値などによって処理を分岐させることができます。

比較演算子

これから説明する制御文では、比較演算子を使用して条件式の評価を行いプログラムの制御を行います。
条件式とは以下のようなものことをいいます。 その式の結果は、true(真)もしくはfalse(偽)という結果を返します。

  • 値1と値2を比較する場合の条件式
    値1 比較演算子 値2
 
演算子意味
==等しい
!=異なる
<小さい
>大きい
<=より小さいか等しい
>=より大きいか等しい
!条件の否定
instanceofクラスの型のチェック*1
public class Compare {

    /**
     * 比較演算子での条件式の結果を確認します
     */
    public static void main(String[] args) {

        int a = 10;
        
        int b = 10;
        
        // aとbの値が等しいか確認します
        System.out.println(a == b);
        
        int c = 50;
        
        int d = 100;
        
        // cの値がdの値より大きいか確認します
        System.out.println(c > d);
        
    }

}

if文

  • if
    if文のifとは英語で「もしも・・・だったら」などといった場合の「もしも」の意味で使用しますね。
    プログラムでも同じように使用します。構文としては以下のようになります。

  • ()の中の条件式の結果がtrueなら{}の中の処理を行います。
    if (条件式) {
    
        // 条件を充たした場合の処理を記述します
        
    } else {
    
        // 条件を充たさなかった場合の処理を記述します
        
    }
  • サンプルプログラム - そのときの気温に対して暑いかどうかのメッセージを出力します。
    temperatureの値を変更してプログラムを実行し結果を確認してみましょう。
    public class IfSample1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
            // 温度を表す変数を宣言します
            int temperature = 20;
    
            // 気温が25℃以上だったら暑い日だとします。
            if (temperature >= 25) {
            
                System.out.println("暑いです。");
                
            } else {
            
                System.out.println("暑くないです。");
                
            }
        }
    
    }
  • else if
    • 複数の条件を判定したい場合にはelse ifを使用します。
      if (条件1) {
      
          条件1を充たしているときの処理
          
      } else if (条件2) {
      
          条件2を充たしているときの処理
          
      } else {
      
          条件1、条件2にあてはまあらなかった場合の処理
          
      }
  • サンプルプログラム - 複数の条件で判定します。
    public class ElseIf {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            // 気温
            int temperature = 10;
    
            // 
            if (temperature > 30) {
                
                System.out.println("とても暑いですね");
                
            } else if (temperature > 20) {
                
                System.out.println("暑いですね");
                
            } else if (temperature > 15) {
                
                System.out.println("ちょうど良いですね。");
                
            } else {
                
                // どの条件にも当てはまらなかった場合に実行されます
                System.out.println("寒いですね。");
                
            }
    
        }
    
    }
  • if文の組み合わせ
  • if文の中にif文を書くこともできます。

    public class IfNest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            // 気温
            int temperature = 15;
    
            // 30℃以上の場合は
            if (temperature >= 30) {
                // とても暑いです
                System.out.println("とても暑いですね");
            }
            // 20℃以上の場合は
            else if (temperature >= 20) {
                // 25~29℃の場合は
                if (temperature >= 25) {
                    // 暑いです
                    System.out.println("暑いですね"); // ←が実行されます
                }
                // 20~24℃の場合は
                else {
                    // 普通です
                    System.out.println("普通ですね");
                }
            }
            // 20℃未満の場合は
            else {
                // 暑くありません
                System.out.println("暑くありません");
            }
        }
    
    }
     
  • ||と&&
    1つのif文に複数の条件を書くこともできます。
    複数条件を書くときに使うのが、||と&&です。

    ||は「AまたはB」でAの条件かB条件がtrue(真)ならばこの2つの条件の結果はtrue(真)となります。

    &&は「AかつB」Aの条件とBの条件どちらもtrue(真)の場合、2つの条件は結果はtrue(真)となります。

  • サンプルプログラム - 以下のように値の範囲を判定したいのであれば&&を使用して「値が数値1~数値2までの範囲内」かを調べることもできます。
    // 気温
    int temperature = 9;
    
    // 10~20度の場合は
    if (temperature >= 10 && temperature <= 20) {
        // 丁度良い温度です
        System.out.println("丁度良い温度ですね");
    }
  • ===
    慣れるまでは気をつけてください。
    • =代入==比較です。間違いやすいので注意しましょう。*2
      int i = 1;
      System.out.println(i == 2); // 比較結果の「false」
      System.out.println(i = 2); // 代入なのでその結果の「2」が表示されます
  • 条件判定の優先順位
  • ()括弧をつけると条件判定の優先順位が変わります。
    数学と同じですね。内側の()から処理がされていきます
    // 気温
    int temperature = 9;
    // 湿度
    int humidity = 49;
    
    // 気温が10~20度で、湿度が50未満の場合は
    if ((temperature >= 10 && temperature <= 20) && humidity < 49) {
        // 丁度良い環境です
        System.out.println("丁度良い環境ですね");
    }
  • 文字列の比較
    文字列(String)の比較はequalsを使います。
     
    2つの文字列が一致していることを判定するときは
    String stringA = "AAA";
    
    if ("AAA".equals(stringA)) {
        System.out.println("stringAはAAAです");
    }
     
    2つの文字列が一致していないことを判定するときは
    String stringB = "BBB";
    
    if (!"AAA".equals(stringB)) {
        System.out.println("stringBはAAAではありません");
    }
    のように記述します。

swtich文

複数の条件分岐を記述できるswitch文という構文があります。

  • 構文
    switch (判定対象) {
        case 条件:
        break;
    
        default:
        break;
    }
     
    ※caseは複数回記述することができます。
    defaultは省略可能です。(が、書くようにした方が良いでしょう)
     
    switch文は使用する機会があまりないかもしれません。
    理由は以下のようなものがあります。
     
    1. 一致しているという判定しかできない
    2. switchに指定できる値は基本型(プリミティブ型)のcharbyteshortintでないといけない(Stringは使用できません)
    3. breakを書き忘れることによりブロック外の処理が実行されてしまう。(breakはcase内の処理を終了する命令です)
  • breakを書き忘れた悪い例
    // 気温
    int temperature = 10;
    
    switch (temperature) {
        case 20:
        System.out.println("20度です");
        break;
    
        case 10:
        System.out.println("10度です"); // ←が実行されます
    
        default:
        System.out.println("その他です"); // case 10:のbreakがないと、←が実行されてしまいます
        break;
    }
  • if文とswitch文の比較
    以下のように、if文でもswitch文と同じ処理を記述できます。
    基本的には使用できる型を気にしないで済むif文を使用すればいいでしょう。
    // 気温
    int temperature = 10;
    
    switch (temperature) {
        case 20:
        System.out.println("20度です");
        break;
    
        case 10:
        System.out.println("10度です"); // ←が実行されます
        break;
    
        default:
        System.out.println("その他です");
        break;
    }
     
    上記のswitch文をif文で書くと、以下のようになります。
    // 気温
    int temperature = 10;
    
    if (temperature == 20) {
        System.out.println("20度です");
    }
    else if (temperature == 10) {
        System.out.println("10度です"); // ←が実行されます
    }
    else {
        System.out.println("その他です");
    }

三項演算子

if~elseを1行にまとめて書くことのできる構文があります。(使う機会は少ないかもしれません)

(条件式) ? 条件を満たした場合の処理: 条件を満たさなかった場合の処理
int i = 1;
String s = i > 0 ? "条件を満たしました" : "条件を満たしませんでした";
System.out.println( s );

練習問題

  1. BMIの計算をして結果を表示するプログラムを作ってみましょう。
    • BMIは以下の式で求めることができます。
      BMI=体重(kg)/(身長(m)x身長(m))
      18.5未満痩せている
      18.5以上25未満普通
      25以上30未満肥満1
      30以上35未満肥満2
      35以上40未満肥満3
      40以上肥満4
       
  2. 自動販売機のような動作をするプログラムを作ってみましょう。
    (金額を入力して、¥120以上だったら「缶ジュースを買いました。おつりは¥xxxです」と表示する)

Java勉強会カリキュラムに戻る


*1 クラスについては次回以降で解説予定
*2 他の言語では、if文に=を書けてしまうものもあります

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-08 (土) 14:52:33 (668d)