if文の使い方その4

今回のC#プログラミング学習も、前回の続きで、分岐処理のif文を学んでいきます。

プログラム例

まずは今回学んでいくC#プログラム例を見てみましょう。

using System;

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

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

			Console.ReadLine();
		}
	}
}

プログラム例をダウンロードするにはここをクリックします。

ダウンロードしたZIPファイルを解凍して、「Sample.sln」を開くとVisualStudioが立ち上がってきます。

ビルドメニューから「ソリューションのビルド」を選択し、ビルドします。

VisualStudioでのビルド成功画面

ビルドが成功したら、F5キーを押してプログラムを動かします。

プログラム実行画面

今回はサイコロを振るというシチュエーションなので、1から6までの数値の入力を促されます。

まずは「3」を入力しEnterキーを押します。

3を入力してEnterキーを押した画面

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

今回は分岐処理なので、もう一度F5キーを押してプログラムを立ち上げます。

ちなみにこの時点で、何も入力しないでEnterキーを押した場合は、例外処理が発生してしまうので、必ず何らかの数値を入力します。

今度は「6」を入力してEnterキーを押します。

6を入力してEnterキーを押した画面

すると、今度は「偶数の目です」と表示されるので、Enterキーを押すとプログラムが終了します。

さらにもう一度F5キーを押してプログラムを立ち上げます。

最後は「7」を入力してEnterキーを押します。

7を入力してEnterキーを押した画面

すると、「範囲外の値です」と表示されるので、Enterキーを押してプログラムを終了させます。

プログラム解説

上記のプログラム例について解説していきます。

数値の入力

今回は、サイコロを振るというシチュエーションでプログラムを作っているので、ユーザーは、1から6までの数値の入力を促されます。

Console.Write("1から6のサイコロの目を入力:");
int nDice = int.Parse( Console.ReadLine() );

ユーザーからの入力は「Console.ReadLine」で行います。

さらに今回は、入力された文字を数値として扱っていきたいので、「int.Parse」のカッコに入れて使っています。

「int.Parse( Console.ReadLine() )」とすることで、int型の変数で数値を受け取ることができます。

入力値の判断

次に、入力された値をif文で判断し、その後の処理を分けます。

プログラム例では以下の部分です。

if (nDice >= 1 && nDice <= 6)
{
	if (nDice == 2 || nDice == 4 || nDice == 6)
	{
		Console.Write("偶数の目です");
	}
	else
	{
		Console.Write("奇数の目です");
	}
}
else
{
	Console.Write("範囲外の値です");
}

Console.ReadLine();

今回は、if文が少し複雑なので、二つに分けて考えていきます。

外側のif文

まずは、外側部分は以下のような感じになっています。

if (nDice >= 1 && nDice <= 6)
{
	…条件式が成立していたら実行される部分…
}
else
{
	Console.Write("範囲外の値です");
}

このif文の構造なら、前々回やりましたね。

最初のif文の条件式が成立していたら、そこに続く「{」から「}」に囲まれている範囲の部分が実行されます。

そうでなければ、elseに続く「{」から「}」に囲まれた部分が実行されます。

そして問題の条件式ですが、「nDice >= 1 && nDice <= 6」となっています。

今回はif文も複雑ですが、条件式も複雑になっていますので、これも分けて考えます。

条件式をどのように分けて考えるのかというと、「nDice >= 1」、「&&」、「nDice <= 6」この三つに分けて考えます。

まず、一番左の「nDice >= 1」ですが、これは変数「nDice」が「1以上ならば成立」という意味です。

前回のように「>」だけなら「1より大きければ成立」という意味ですが、今回は「=」が付いているので「1以上ならば成立」という意味になります。

次に、一番右の「nDice <= 6」ですが、これも考え方は同じなので、変数「nDice」が「6以下ならば成立」という意味です。

そして最後に「&&」ですが、これは左の条件式と右の条件式が両法成立しているときに、if文全体の条件式が成立しているとみなすという意味があります。

このことから、「&&」のことを、AND演算子といいます。

if文全体の条件式としては、変数「nDice」が1以上6以下ならば成立という意味になります。

なので、変数「nDice」が、0や7だった場合には、else以降の「Console.Write("範囲外の値です")」が実行されます。

内側のif文

次は、内側のif文を見ていきましょう。

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

これもif文の構造自体は、前々回やりましたね。

なので、if文が成立していたら、「Console.Write("偶数の目です")」が実行され、if文が成立しなかった場合は、「Console.Write("奇数の目です")」が実行されます。

このことから、条件式「nDice == 2 || nDice == 4 || nDice == 6」は、変数「nDice」が偶数であるときに成立する条件式であることがわかります。

考え方としては、先ほどの「&&」のように、「||」で条件式を分割します。

先ほどの「&&」が、左右の条件式の両方が成立したときに、if文全体が成立するとみなすことに対し…。

「||」は、左右のどちらか片方でも成立していれば、if文全体が成立するとみなすという意味があります。

このことから、「||」をOR演算子といいます。

そして、「==」はif文の最初に学習したように、「==」の左辺と右辺が等しいときに成立する演算子です。

なので、変数「nDice」が、2か4か6のときに成立するif文であることがわかります。

if文全体の構造

それでは、今回の条件分岐全体をまとめていきましょう。

まず、外側のif文で、変数「nDice」の数値を1から6までに絞ります。

それ以外の数値であれば、範囲外であることを表示して終了。

外側のif文が成立したときのみ、内側のif文に進みます。

内側のif文では、変数「nDice」が、2か4か6であれば、偶数であると表示して終了します。

それ以外のときは、奇数であることを表示して終了します。

まとめ

今回のように、if文の中にif文があるものを、if文のネストなどといいます。