2017/11/16 公開
・最も近い値の取得
指定した値に1番近い値を配列から探し、その値を表示するプログラムをを紹介します。
配列に格納されている値と指定した値の差の絶対値を計算し、その差が最も小さくなる配列の値が、指定値に最も近い値です。
NearestValue1.java ← クリックしてダウンロードページに移動
001: public class NearestValue1 { 002: // 最も近い値を格納した配列の添え字を求める 003: public static int getNearestValue( int[] list, int v ) 004: { 005: // 変数の宣言 006: int i; // ループ用 007: int num; // 配列の添え字 008: int minv; // 配列値-指定値vの絶対値 009: 010: // 配列の個数が1未満の処理 011: if ( 1 >list.length ) return -1; 012: 013: // 指定値と全ての配列値の差を比較 014: num = 0; 015: minv = Math.abs( list[ 0 ] - v ); 016: for ( i = 1; i < list.length; ++ i ) { 017: if ( Math.abs( list[ i ] - v ) < minv ) { 018: num = i; 019: minv = Math.abs( list[ i ] - v ); 020: } 021: } 022: 023: return num; 024: } 025: 026: 027: // メイン 028: public static void main( String[] args ) 029: { 030: // 数値群 031: int[] list = { 344, 767, -645, 96, -432, 3488, 213, 195 }; 032: 033: // 最も近い値を格納した配列番号を取得 034: int v = -200; 035: int num = getNearestValue( list, v ); 036: 037: // 結果の表示 038: if ( 0 > num ) 039: System.out.println( "値の取得に失敗しました!" ); 040: else 041: System.out.println( v + "に最も近い値は" + list[ num ] ); 042: } 043: }
NearestValue1の出力結果
-200に最も近い値は-432
ここからは、このソースコードを上から順番に解説していきます。
001: public class NearestValue1 {
クラス名を、NearestValue1としています。
002: // 最も近い値を格納した配列の添え字を求める 003: public static int getNearestValue( int[] list, int v )
指定値(v)に1番近い値を持つ配列(list[])の添え字を求めるメソッドです。
005: // 変数の宣言 006: int i; // ループ用 007: int num; // 配列の添え字 008: int minv; // 配列値-指定値vの絶対値
010: // 配列の個数が1未満の処理 011: if ( 1 >list.length ) return -1;
配列(list[])に格納されている値が1個未満の場合、配列の添え字を求めることができないので、結果として-1を返しています。
013: // 指定値と全ての配列値の差を比較 014: num = 0; 015: minv = Math.abs( list[ 0 ] - v );
求める値の候補(初期値)として配列の先頭(list[0])の情報を変数numと変数minvに代入しています。numには配列の先頭の添え字である0、minvには指定値vと配列の先頭の値(list[0])との差の絶対値を代入しています。
016: for ( i = 1; i < list.length; ++ i ) { 017: if ( Math.abs( list[ i ] - v ) < minv ) { 018: num = i; 019: minv = Math.abs( list[ i ] - v ); 020: }
指定値と配列の2番目の値から最後の値の差を計算していき、その差がminvより小さくなるときにnumとminvの値を変更していきます。
023: return num;
for文を抜けたときのnumの値が求めたい配列の添え字になっています。その値をreturn文で返します。
027: // メイン 028: public static void main( String[] args )
このmainメソッドからプログラムを実行します。
030: // 数値群 031: int[] list = { 344, 767, -645, 96, -432, 3488, 213, 195 };
033: // 最も近い値を格納した配列番号を取得 034: int v = -200; 035: int num = getNearestValue( list, v );
指定した値(v=-200)から1番近い値をgetNearestValueで検索しています。numに検索した配列の添え字が代入されます。
037: // 結果の表示 038: if ( 0 > num ) 039: System.out.println( "値の取得に失敗しました!" ); 040: else 041: System.out.println( v + "に最も近い値は" + list[ num ] );
numが0未満の場合、結果が無いことを表しているので、"値の取得に失敗しました!" というメッセーを表示しています。numが0以上の時は値が取得できたことを表しているので、指定値と配列の値を表示しています。
■関連コンテンツ
Javaの配列 | 同じ型の変数をまとめた配列について解説 |
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
|
if文条件による処理の分岐に使用するif文について解説 |
|
計算結果の表示足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |