【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で中央値を画面出力しています。
おまけ
最後に実行結果を表示しておきます。
ということで、今回の記事はここまでです。何か参考になる情報があれば嬉しいです。
ほかにもプログラミングの内容を扱った記事がありますので、気になった方は見てみてください。
最後までお読みいただき、ありがとうございました。