分岐命令--- if 命令


■ if 命令の書き方

if命令は、次のように記述します。

   if (条件){
             条件が満たされた場合の処理
          }
   else {
             条件が満たされない場合の処理
           } 
例えば、「定価が1000円以上の商品は100円引きする。 それ以外の商品は50円引きする」という処理をしたい場合、次のように記述します。
   if (定価>=1000){
             定価=定価  - 100;
          }
   else {
             定価=定価 - 50;
           } 
これは、次のように書いても同じことをします。
   if (定価<1000){
             定価=定価  - 50;
          }
   else {
             定価=定価 - 100;
           } 
次のプログラムは、定価をキーボードから入力させ、もし2500円以上であれば300円 値引きし、それ以外の場合は100円引きとし、値引き後の価格を出力するプログラムです。
// 定価を入力し、値引き計算後、結果を表示する。
import java.io.*;

public class IfHantei1{
    public static void main(String[] arges) throws IOException {
	String  teika_in;
	int teika, nebikigo;
                                      
	BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

                   while(true){
                             System.out.print("定価を入力して下さい。");
                             teika_in = kbd.readLine();
                      
                       try{
                              teika = Integer.parseInt(teika_in);
                              if (teika >= 2500){
                                             nebikigo = teika - 300;
                                            }
                              else {
                                             nebikigo = teika - 100;
			      }
                              System.out.println("値引き後の価格は、"+nebikigo+"円です。");
                            }
                         catch(NumberFormatException e){
                              System.out.println("数値を入力して下さい。");
                              continue;
                             }
                          break;
                     }
    }
}

このプログラムを実行させると、次のように処理します。

[egi@taro prog]$ java IfHantei1
定価を入力して下さい。1200
値引き後の価格は、1100円です。
[egi@taro prog]$ java IfHantei1
定価を入力して下さい。5000
値引き後の価格は、4700円です。
[egi@taro prog]$ java IfHantei1
定価を入力して下さい。2500
値引き後の価格は、2200円です。
[egi@taro prog]$ java IfHantei1
定価を入力して下さい。4t600
数値を入力して下さい。
定価を入力して下さい。4600
値引き後の価格は、4300円です。
[egi@taro prog]$ 
このように、条件によって処理の内容を変える場合に、if命令を使います。
■ if else 命令


処理によっては、条件が1つだけとは限りません。もっと複雑な条件もあります。 例えば、「定価が2500円以上であれば300円値引きし、2500円未満で1000円以上であれば、200円値引きし、それ以外であれば100円値引きする。」という場合、条件は次の3つがあります。
  1. 300円値引きするための条件-----2500円以上
  2. 200円値引きするための条件-----2500円未満で1000円以上
  3. 100円値引きするための条件-----1000円未満
このような場合は、次のように if命令とelse if命令を組み合わせて記述します。但しこれは一例で、他の書き方もできます。
      if (1の条件) {
                  300円値引きする処理
          }
       else  if (2の条件) {
                   200円値引きする処理
                }
                else  {
                       100円値引きする処理
                          }
上記のように、
  「もし1の条件であれば、300円値引きして、
       もし2の条件であれば、200円値引きする、
         それ以外であれば100円値引きする。」
と、else if 命令を使用して条件を複数個記述します。上記の書き方では、3の条件を記述していません。これは記述しても構いませんが、書かなくても"それ以外"に該当しますので同じように処理します。

上記の値引きをするプログラムを以下に示します。

// 定価を入力し、値引き計算後、結果を表示する。
import java.io.*;

public class IfHantei2{
    public static void main(String[] arges) throws IOException {
	String  teika_in;
	int teika, nebikigo;
                                      
	BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

        while(true){
                     System.out.print("定価を入力して下さい。");
                     teika_in = kbd.readLine();
                      
        	     try{
                              teika = Integer.parseInt(teika_in);
                              if (teika >= 2500){
                                             nebikigo = teika - 300;
                                            }
                              else  if (teika >=1000) {
                                             nebikigo = teika - 200;
	        	            }
	                	      else { 
	   	                             nebikigo = teika - 100;
		                           }
                              System.out.println("値引き後の価格は、"+nebikigo+"円です。");
        	     }
        	     catch(NumberFormatException e){
                              System.out.println("数値を入力して下さい。");
                              continue;
       	            }
	            break;
        }
    }
}

これを実行すると次のようになります。

[egi@taro prog]$ java IfHantei2
定価を入力して下さい。3000
値引き後の価格は、2700円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。2000
値引き後の価格は、1800円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。1000
値引き後の価格は、800円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。900
値引き後の価格は、800円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。2500
値引き後の価格は、2200円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。2400
値引き後の価格は、2200円です。
[egi@taro prog]$ java IfHantei2
定価を入力して下さい。1ooo
数値を入力して下さい。
定価を入力して下さい。1000
値引き後の価格は、800円です。
[egi@taro prog]$ 
このように、else if 命令を使うことによって、より複雑な条件を判断して処理を変えることができるのです。

■ 条件式の書き方(関係演算子と論理演算子)

if命令では、条件を判断して処理の手順を変えることができます。 そこで、条件をどのように記述できるかが非常に重要になってきます。 if命令の条件は、次の2種類の演算子を使って条件を記述します。
  1. 関係演算子 2つの値を比較するために使用する演算子を関係演算子と呼び、 次のようなものがあります。

    演算子説明記述例例の意味
    >
    大きいif (a>100) {処理}aが100より大きいならば処理をする
    >=
    大きいか等しいif (a>=100) {処理}aが100以上ならば処理をする
    <
    小さいif (a<100) {処理}aが100より小さいならば処理をする
    <=
    小さいか等しいif (a<=100) {処理}aが100以下ならば処理をする
    ==
    等しいif (a==100) {処理}aが100であるならば 処理をする
    !=
    等しくないif (a!=100) {処理}aが100でないならば処理をする
    a.equals( )
    等しい(文字列の比較)if (a.equals("xyz")) {処理}aがxyzならば処理をする

    上記のうち、文字列の等価比較は、演算子ではなくメソッドと呼びます。 通常の等価比較で文字列を比較すると、文字列が格納されているアドレスを比較することになります。 そのために、文字列と文字列が同じか否かを比較するためのメソッドが準備されており、上記のように使用します。

  2. 論理演算子 ひとつの条件式に、2つ以上の条件を関係させて記述する必要があることがあります。 例えば、「価格が2500円であれば300円引きだが、女性であればさらに200円引きする」場合、次のような条件になります。

    1. 500円値引きするための条件-----女性が2500円以上購入
    2. 300円値引きするための条件-----2500円以上購入
    3. 200円値引きするための条件-----2500円未満で1000円以上購入
    4. 100円値引きするための条件-----1000円未満購入

    1の条件は、"価格が2500円以上"と"性別が女性"の2つの条件が同時に成立していることが条件です。
    (ここでは、性別の項目に"f"という値があれば女性を意味し、"m"があれば男性を意味することにします。)

    この条件式は、次のように記述します。

                   価格 > 2500  &&  性別.equals("f")
    

    ここで使用されている&&は、「2つの条件の両方が成立するならば」という意味で使われています。このように2つの条件式がどのように成立するかを判断するための演算子を論理演算子と呼び、次の3通りがあります。

    演算子説明記述例例の意味
    &&
    論理積(両方とも成立する/and)if (a==3 && b==4)
    { 処理 }
    aが3でかつbが4であるならば処理をする
    ||
    論理和(どちらかが成立する/or)if (a==3 || b==4)
    { 処理 }
    aが3またはbが4であるならば処理をする
    !
    否定(成立しない/not)if (!(a==3 && b==4))
    { 処理 }
    aが3でかつbが4、の条件が成立しないならば処理をする
    これは、if (a!=3 || b!=4) と同じ意味。

■ 論理演算子を使ったプログラム例

次のプログラムは、以下の条件で値引き計算をし、結果を出力するプログラムです。

  1. 500円値引きするための条件-----女性が2500円以上購入
  2. 300円値引きするための条件-----2500円以上購入
  3. 200円値引きするための条件-----2500円未満で1000円以上購入
  4. 100円値引きするための条件-----1000円未満購入
// 定価と性別を入力し、値引き計算後、結果を表示する。
import java.io.*;

public class IfHantei3{
    public static void main(String[] arges) throws IOException {
	String  teika_in, sex_in;
	int teika, nebikigo;
                                      
	BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));

        while(true){
                    System.out.print("定価を入力して下さい。");
                    teika_in = kbd.readLine();
                    System.out.print("性別をfかmで入力して下さい。");
                    sex_in = kbd.readLine();
                    try{
                        teika = Integer.parseInt(teika_in);
                        if (teika >= 2500 && sex_in.equals("f")) {
                                     nebikigo = teika - 500;
                        }
                        else if (teika >= 2500){
                                     nebikigo = teika - 300;
                             }
                             else  if (teika >=1000) {
                                     nebikigo = teika - 200;
                                  }
                                  else { 
                                        nebikigo = teika - 100;
                                       }
                       System.out.println("値引き後の価格は、"+nebikigo+"円です。");
                    }
                    catch(NumberFormatException e){
                       System.out.println("数値を入力して下さい。");
                       continue;
                    }
                    break;
        }
    }
}
上記プログラムの実行例を以下に示します。
[egi@taro prog]$ java IfHantei3
定価を入力して下さい。1000
性別をfかmで入力して下さい。f
値引き後の価格は、800円です。
[egi@taro prog]$ java IfHantei3
定価を入力して下さい。3000
性別をfかmで入力して下さい。f
値引き後の価格は、2500円です。
[egi@taro prog]$ java IfHantei3
定価を入力して下さい。2000
性別をfかmで入力して下さい。f
値引き後の価格は、1800円です。
[egi@taro prog]$ java IfHantei3
定価を入力して下さい。3000
性別をfかmで入力して下さい。m
値引き後の価格は、2700円です。

プログラミング / 江木