talosのプログラミング教室

はじめてのJava ~制御文編~

スポンサーリンク

f:id:talosta:20200331181701p:plain

今回はJava制御文を紹介します。

種類は多いですが意味のわかりやすい名前を付けられているので、簡単に覚えられると思います。

ぜひ使いながら覚えてください。

if文

条件分岐をする制御文です。

以下のように使います。

class Statement1 {
    public static void main(String args[]) {
        int a = 0;
        if(a == 0) {
            System.out.println("true");
        }
    }
}
// 出力
true

if文は( )の中がtrue(真)のときはその後の{ }の中を実行し、false(偽)のときは実行しません。

{ }がない場合は直後の1文だけが実行されます。

「a == 0」というのは「aが0に等しい」ということを表しています。

Javaの場合、「a = 0」と書くとaに0を代入するという意味なので注意しましょう。

以下は関係演算子の一覧です。


関係演算子 意味
== 左項と右項が等しい
!= 左項と右項が等しくない
> 左項が右項より大きい
< 左項が右項より小さい
>= 左項が右項以上
<= 左項が右項以下


if-else文

ifの後にelseを追加することで、if( )の中が偽の場合の処理を指定できます。

次のように使います。

class Statement2 {
    public static void main(String args[]) {
        int a = 1;
        if(a == 0) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}
// 出力
false

また、elseとifを組み合わせることで3つ以上に条件分岐させることもできます。

class Statement3 {
    public static void main(String args[]) {
        int a = 2;
        if(a == 0) {
            System.out.println("0");
        } else if(a == 1) {
            System.out.println("1");
        } else {
            System.out.println("a is neither 0 nor 1.");
        }
    }
}
// 出力
a is neither 0 nor 1.

for文

for文は繰返しを行う制御文です。

以下のように使います。

class Statement4 {
    public static void main(String args[]) {
        for(int i = 0; i < 5; i++) {
            System.out.println(i);
        }
    }
}
// 出力
0
1
2
3
4

( )の中にセミコロン区切りで3つの文を書きます。

1つ目は初期化です。

上の例ではiを0で初期化しています。

2つ目は繰返しを続ける条件です。

上の例ではiが5以上になるまで繰返しを続けるように指定しています。

5以上になったら繰返しは終わるので5は出力されていません。

3つ目は増減幅です。

上の例では繰返しが1回終わるごとに、iを+1しています。

while文

while文も繰返しを行う制御文です。

while文は以下のように使います。

class Statement5 {
    public static void main(String args[]) {
        int i = 0;
        while(i < 5) {
            System.out.println(i);
            i++;
        }
    }
}
// 出力
0
1
2
3
4

for文の例と同じことをしたプログラムです。

これだけ見るとfor文のほうがすっきりしていますが、while文のほうが適している状況もあります。

それは繰返しの条件が数値ではないときです。

例えば、キーボードで入力を受け付け、ある文字が入力されるまでは処理を続けるという場合。

// whileを用いた場合
import java.io.*;

class Statement6 {
    public static void main(String args[]) {
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);

            while(br.readLine().equals("a")) {   // 入力受付
            }
            System.out.println("end");

            br.close();
        }
        catch(Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}
// forを用いた場合
import java.io.*;

class Statement7 {
    public static void main(String args[]) {
        String s = "";

        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);

            for( ; ; ) {    
                s = br.readLine();
                if(!s.equals("a")) {
                    break;
                }
            }
            System.out.println("end");

            br.close();
        }
        catch(Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}

whileを用いたほうがすっきりしていますよね。

このように上手く使い分けることで見やすいコードを書くことができます。

do-while文

whileでは条件によっては1回も{ }内の処理を行わず終了することがありますが、do-whileでは必ず1回は{ }内の処理を行います。

例えば、

class Statement8 {
    public static void main(String args[]) {
        int i = 10;
        while(i < 5) {
            System.out.println(i);
            i++;
        }
    }
}
// 出力

上記のコードでは、iは最初から10でwhileの条件が i < 5 なので、{ }の中の処理は一度も行われずに終了します。

これをdo-whileにすると、

class Statement9 {
    public static void main(String args[]) {
        int i = 5;
        do {
            System.out.println(i);
            i++;
        } while(i < 5);
    }
}
// 出力
5

と一度だけ{ }の中の処理が行われていることがわかります。

break文

break文はループを強制終了させることができます。

break文は以下のように使います。

class Statement10 {
    public static void main(String args[]) {
        for(int i = 0; i < 10; i++) {
            System.out.println(i);
            if(i == 5) {
                break;
            }
        }
    }
}
// 出力
0
1
2
3
4
5

iが5に等しいときに強制終了したため、それ以降は出力されません。

continue文

continue文はそれ以降の処理をスキップし、次の繰返しに移ります。

言葉ではわかりにくいと思うので、コードをしっかり読んで理解してください。

class Statement11 {
    public static void main(String args[]) {
        for(int i = 0; i < 10; i++) {
            if(i == 5) {
                continue;
            }
            System.out.println(i);
        }
    }
}
// 出力
0
1
2
3
4
6
7
8
9

iが5に等しいときはcontinue以降の処理をスキップするため、5だけ表示されていません。

switch文

switch文はif文の複数バージョンです。

if文でもelseを使えば複数に条件分岐できますが、見栄えがよくありません。

3つ以上に分岐するときはswitch文を使うとよいでしょう。

switch文は以下のように使います。

class Statement12 {
    public static void main(String args[]) {
        int i = 3;
        switch(i) {
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
        }
    }
}
// 出力
three

breakがないとそれ以降の処理をすべて実行してしまいますので、忘れないようにしましょう。

おわりに

今回はJava制御文を説明しました。

次回はクラスメソッドについて説明します。