今回はまたまた一緒にプログラムを作ってみましょう!
タイトルの通り、配列の要素の中の最小値を求めるプログラムです。
ちなみにちょっと応用すれば当然最大値も求められます。
たとえば、配列の要素が[ 4, -8, 2, -1, 7 ]だとすると、「-8」が最小値になります。
■ポイント
まずは文章で説明します。
配列の要素を1つずつ大小を比較していき最小値を求めます。
すると必要となる処理がみえてきますね。
比較を行うということはif文、
そして要素の数だけ比較を行うということはfor文が必要になりますね。
さらには最小値を格納しておくための変数も用意しておいた方がいいでしょう。
では流れがわかったところでいよいよ書いてみます。
■Practice_05_01.java
class Practice_05_01 { public static void main(String[] args) { int array[] = { 4, -8, 2, -1, 7 }; int min = 0; for(int i = 0; i < array.length; i++) { if(min > array[i]) { min = array[i]; } } System.out.println("最小値 : " + min); } }
■実行結果
最小値 : -8
■解説
- 4行目
暫定の最小値を格納しておくための変数minを用意しています。
とりあえず0で初期化しています。 - 5行目
そのminを配列の要素1つ1つをfor文を用いて比較していきます。 - 6,7行目
もし配列の要素の方が小さければ、暫定最小値minの値が要素の値になります。
すると最終的には最も小さい値がminに格納されているわけです。
ただし、これでは完璧ではありません。
もし配列が[ 22, 55, 44, 11, 33 ]でこのプログラムを実行したら、何という数が表示されるでしょう?
答えは「0」が表示されます。
これはminを0で初期化しているためです。
変数は配列に実際にある数で初期化しましょう。
では修正版です。
■Practice_05_01.java(修正版)
class Practice_05_01 { public static void main(String[] args) { int array[] = { 22, 55, 44, 11, 33 }; int min = array[0]; for (int i = 1; i < array.length; i++) { if (min > array[i]) { min = array[i]; } } System.out.println("最小値 : " + min); } }
■実行結果
最小値 : 11
■解説
- 4行目
minを配列の0番目の値で初期化しています。 - 5行目
minと0番目は同じ値なので比較する必要はないので、1番目から比較を行えばOKです。
したがってfor文内の変数iは1で初期化されています。
■おまけ
このサンプルを応用すれば最大値も求めることができますね。
さらにはメソッドとして定義しておけばソースが見やすくなりますね。
ということで、そのサンプルも載せておきます。
class Practice_05_02 { public static void main(String[] args) { int array[] = { 22, 55, 44, 11, 33 }; System.out.println("最小値 : " + minElem(array)); System.out.println("最大値 : " + maxElem(array)); } static int minElem(int ary[]) { int min = ary[0]; for(int i = 1; i < ary.length; i++) { if(min > ary[i]) min = ary[i]; } return min; } static int maxElem(int ary[]) { int max = ary[0]; for(int i = 1; i < ary.length; i++) { if(max < ary[i]) max = ary[i]; } return max; } }