【Java】if文のみで3つの数値から中央値を求める

今回は、if文のみで3つの数値から中央値を求める方法をJavaを使って解説します。

サンプルコード

アルゴリズムを実際に説明するより、直接コードを見てもらった方が早いと思います。

Eclipse等のIDEにコードをコピペするなり直接入力するなりして、実際に実行してみてください。

ちなみに私はEclipseでコードを書いて実行したので、Eclipseの動作確認は済んでます。

import java.util.Scanner;

class sample {
	
	public static void main (String[] args) {
		Scanner stdIn = new Scanner (System.in);
		
		System.out.print("整数a:");	int a = stdIn.nextInt();
		System.out.print("整数b:");	int b = stdIn.nextInt();
		System.out.print("整数c:");	int c = stdIn.nextInt();
		
		int center = 0;	// 0で初期化
		
		// 2つ以上の値が等しいとき
		if (a == b) center = a;
		if (b == c) center = b;
		if (a == c) center = c;
		
		// 3つの値が異なるとき(最小値と最大値以外が中央値)
		int min = a;
		int max = a;
		
		if (b < min) min = b;
		if (c < min) min = c;
		
		if (b > max) max = b;
		if (c > max) max = c;
		
		if (a != min && a != max) center = a;
		if (b != min && b != max) center = b;
		if (c != min && c != max) center = c;
		
		System.out.println ("中央値は" + center + "です。");
	}
}

アルゴリズムの説明

まず、場合分けを行います。以下の3つのパターンが想定されます。

(1)3つの値がすべて等しいとき

(2)2つの値のみ等しいとき

(3)3値すべて異なるとき

それぞれ見ていきます。

(1)のとき

(1)についてですが、例えば「3、3、3」の場合です。

この場合は何も考えることはありません。中央値は3です。また、最大値3、最小値も3ということになります。

仮に最初の3を変数a、真ん中の3を変数b、最後の3を変数cに代入したとします。

もちろん、いずれの変数の中身も同じですので、どの値を中央値として出力してもよいことになります。

(2)のとき

続いて(2)です。例えば「3、3、5」といった場合です。

この場合は、最小値が3、最大値が5、中央値は3になります。

最小値と中央値が等しいですね。したがって、最小値=中央値となります。

if (a == b) center = a;
if (b == c) center = b;
if (a == c) center = c;

という3行のif文が(2)の部分に該当します。等しい値が2つある場合、そのどちらかが中央値になります。

(1)の部分がコードにない!って思うかもしれませんが、(1)の部分は(2)と同じく上記のif文3行で処理することができます。

(3)のとき

(3)の部分を処理しているのが下記部分です。

int min = a;
int max = a;
		
if (b < min) min = b;
if (c < min) min = c;
		
if (b > max) max = b;
if (c > max) max = c;
		
if (a != min && a != max) center = a;
if (b != min && b != max) center = b;
if (c != min && c != max) center = c;

3値すべて異なるときは、先に最小値と最大値を見つけて、どちらにも該当しない値が中央値という考え方です。

まず、最小値と最大値の変数minとmaxにaの値を代入しておきます。

その後の2行で最小値が決定し、さらにそのあとの2行で最大値が決定します。

最後のif文の3行ですが、「もしaが最小値でなくて、かつ最大値でもなかったら中央値はaである」というのをbもcも同様に処理しています。

最終的にSystem.out.printlnで中央値を画面出力しています。

おまけ

最後に実行結果を表示しておきます。

ということで、今回の記事はここまでです。何か参考になる情報があれば嬉しいです。

ほかにもプログラミングの内容を扱った記事がありますので、気になった方は見てみてください。

最後までお読みいただき、ありがとうございました。