C#プログラムの条件分岐(if文その2)

今回のC#プログラミング学習も、条件分岐を学びます。

今回もif文なんですが、もう少し複雑にしてみます。

プログラムのダウンロード

まずは今回学習していくためのプログラムをダウンロードしましょう。

ここをクリックして「Sample.zip」ファイルをダウンロードしてください。

ZIP形式になっているので、ダウンロードしたら、マウスの右クリックで「すべて解凍」を選びます。

すると、Sampleプロジェクトが展開されます。

プログラムファイルを開く

Sampleプロジェクトの中に「Sample.sln」ファイルがあるので、このファイルを開くとVisualStudioのVisualC#が立ち上がります。

ソリューションエクスプローラから「Program.cs」を開くと、以下のようなプログラムが表示されます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("1から6のサイコロの目を入力:");
            int iDice = int.Parse( Console.ReadLine() );

            // 入力された値の範囲を調べる
            if (iDice >= 1 && iDice <= 6)
            {
                if (iDice == 2 || iDice == 4 || iDice == 6)
                {
                    Console.Write("偶数の目です");
                }
                else
                {
                    Console.Write("奇数の目です");
                }
            }
            else // 1から6以外
            {
                Console.Write("範囲外の値です");
            }

            Console.ReadLine();
        }
    }
}

プログラムのビルド

F7キーを押すとプログラムのビルドが行われ、実行ファイルが作成されます。


VisualC#でビルドした様子

プログラムの実行

F5キーを押すとプログラムが実行されます。

まずは「1から6のサイコロの目を入力:」と表示されるので、「3」などの数値を入力しEnterキーを押します。

すると入力した値に応じたメッセージが表示されます。


サンプルプログラムを実行した様子

例えば、「3」と入力しEnterキーを押すと、「奇数の目です」と表示されるのでEnterキーを押すとプログラムが終了します。

プログラム解説

それでは今回学習するC#プログラムを見てみましょう。

プログラムの流れ

プログラムの流れは前回とほとんど同じです。

まずは「1から6のサイコロの目を入力:」と表示されるので、何らかの数値を入力しEnterキーを押します。

すると入力した値に応じたメッセージが表示されます。

入力値が「1」「3」「5」だったら「奇数の目です」と表示し、「2」「4」「6」だったら「偶数の目です」と表示します。

もし入力値が1から6の範囲外だったら「範囲外の値です」と表示されます。

条件分岐

サンプルプログラムの条件分岐部分は以下になります。

// 入力された値の範囲を調べる
if (iDice >= 1 && iDice <= 6)
{
    if (iDice == 2 || iDice == 4 || iDice == 6)
    {
        Console.Write("偶数の目です");
    }
    else
    {
        Console.Write("奇数の目です");
    }
}
else // 1から6以外
{
    Console.Write("範囲外の値です");
}

まずは入力値が1から6までの範囲内である必要があるので、「(iDice >= 1 && iDice <= 6)」という条件式を使います。

「&&」というのは、左右の条件式が両方とも成立しているときという意味があります。

つまり「AND」ですね。

「iDice >= 1」というのは、変数「iDice」が「1」以上といういみで、「iDice <= 6」というのは、変数「iDice」が「6」以下であることを表しています。

そしてこの2つが「&&」でつなげられているので、変数「iDice」の値が「1」以上で「6」以下であるときにのみ成立することを表しているわけです。

もしこの条件式が成立しなかった場合には、一番下の「else」以下が実行され「範囲外の値です」と表示されます。

そうではなく条件式が成立したときは、さらに内部の以下の条件式の判定が行われます。

if (iDice == 2 || iDice == 4 || iDice == 6)
{
    Console.Write("偶数の目です");
}
else
{
    Console.Write("奇数の目です");
}

条件式が「(iDice == 2 || iDice == 4 || iDice == 6)」と少し長いので難しそうに感じますが、ひとつひとつ分解していけばたいしたことありません。

まず「||」というのは、左右の条件式のどちらかが成立していればという意味です。

つまり「OR」ということです。

なので「||」で区切ってやれば、あとは前回出てきた「==」が使われている条件式が3つあるだけなので簡単ですね。

復習になりますが「==」というのは、「==」の左辺と右辺の値が等しいことを表しています。

なので、変数「iDice」が「2」か「4」か「6」だったらif文が成立し「偶数の目です」と表示されます。

それ以外、つまり「1」か「3」か「5」だった場合には、「奇数の目です」と表示されるわけです。

ちなみに「==」の反対は「!=」ですので覚えておきましょう。

if文のネスト

今回のサンプルプログラムのようにif文の中にif文があるような構造のことを、if文のネストと言ったりします。

このif文のネストはいくらでも深くできるので、何も考えていないと気が付いた時にはすごく複雑なものになってしまいます。

そして複雑なプログラムというのはわかりにくいので、バグ(エラー)を起こしやすいです。

なので、複雑なことをしてるんだけど、プログラムのソースコードはわかりやすいというのが理想です。

一見矛盾していますが、それができるかどうかがプログラマーの腕の見せどころだったりします。