2017.11.16
2025.08.24
最も近い値の取得方法
最も近い値を見つける方法
例えば、以下の配列の値の中で、5に最も近い値は4です。
10, 4, 22, 2, 1, -1
| 10 - 5 | = 5 | 4 - 5 | = 1 ← 5を引いた値の絶対値が最も小さい | 22 - 5 | = 17 | 2 - 5 | = 3 | 1 - 5 | = 4 | -1 - 5 | = 6
Javaソースコード
指定した値に最も近い値を配列の値を求めるJavaソースコードです。
NearestValue1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043
public class NearestValue1 { // 最も近い値を格納した配列の添え字を求める public static int getNearestValue( int[] list, int v ) { // 変数の宣言 int i; // ループ用 int num; // 配列の添え字 int minv; // 配列値-指定値vの絶対値 // 配列の個数が1未満の処理 if ( 1 >list.length ) return -1; // 指定値と全ての配列値の差を比較 num = 0; minv = Math.abs( list[ 0 ] - v ); for ( i = 1; i < list.length; ++ i ) { if ( Math.abs( list[ i ] - v ) < minv ) { num = i; minv = Math.abs( list[ i ] - v ); } } return num; } // メイン public static void main( String[] args ) { // 数値群 int[] list = { 344, 767, -645, 96, -432, 3488, 213, 195 }; // 最も近い値を格納した配列番号を取得 int v = -200; int num = getNearestValue( list, v ); // 結果の表示 if ( 0 > num ) System.out.println( "値の取得に失敗しました!" ); else System.out.println( v + "に最も近い値は" + list[ num ] ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis NearestValue1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac NearestValue1.java
実行
C:\talavax\javasample>java NearestValue1
-200に最も近い値は-432
Javaソースコードの解説
ここからは、このソースコードを上から順番に解説していきます。
001
public class NearestValue1 {
クラス名を、NearestValue1としています。
002 003
// 最も近い値を格納した配列の添え字を求める public static int getNearestValue( int[] list, int v )
005 006 007 008
// 変数の宣言 int i; // ループ用 int num; // 配列の添え字 int minv; // 配列値-指定値vの絶対値
010 011
// 配列の個数が1未満の処理
if ( 1 >list.length ) return -1;
013 014 015
// 指定値と全ての配列値の差を比較
num = 0;
minv = Math.abs( list[ 0 ] - v );
求める値の候補(初期値)として配列の先頭(list[0])の情報を変数numと変数minvに代入しています。numには配列の先頭の添え字である0、minvには指定値vと配列の先頭の値(list[0])との差の絶対値を代入しています。
016 017 018 019 020
for ( i = 1; i < list.length; ++ i ) {
if ( Math.abs( list[ i ] - v ) < minv ) {
num = i;
minv = Math.abs( list[ i ] - v );
}
指定値と配列の2番目の値から最後の値の差を計算していき、その差がminvより小さくなるときにnumとminvの値を変更していきます。
023
return num;
027 028
// メイン public static void main( String[] args )
030 031
// 数値群 int[] list = { 344, 767, -645, 96, -432, 3488, 213, 195 };
033 034 035
// 最も近い値を格納した配列番号を取得 int v = -200; int num = getNearestValue( list, v );
037 038 039 040 041
// 結果の表示 if ( 0 > num ) System.out.println( "値の取得に失敗しました!" ); else System.out.println( v + "に最も近い値は" + list[ num ] );
numが0未満の場合、結果が無いことを表しているので、"値の取得に失敗しました!" というメッセーを表示しています。numが0以上の時は値が取得できたことを表しているので、指定値と配列の値を表示しています。
以上です。
最も近い値の取得方法に関するコンテンツ
「最も近い値の取得方法」に関係があるコンテンツをまとめています。
- 10進数→2進数変換
- 「AA」から「ZZ」を出力
- 多次元配列
- 配列
- 配列値の反転
- 代入演算子
- 同じマンハッタン距離の座標をプロット
- xy-座標の描画の実装
- xy-座標の描画するクラス
- 2値化
- 2値化 その2
- 2進数
- ビット演算子
- ビットシフト
- break文
- バブルソートとは
- byte型をint型へ変換
- 計算結果表示プログラム
- 「a = a + 1」とは?
- 現在日時の各要素を取得
- 指定数の文字を出力 その1
- 指定数の文字を出力 その2
- 時計の短針と長針の角度
- 最も近い座標を探す
- コラッツ予想の確認
- テーブルによる色変換 その1
- 色をARGB値に分解
- 値の比較
- コンストラクタとは
- continue文
- カウントダウン
- カウントアップ
- 画像の新規作成
- 画像の新規作成 その2
- 現在日時の文字列を生成(DateTimeFormatterクラスを使用)
- サイコロの出目確率
- 2つのサイコロの出目の和の確率
- ゾロ目の出る確率
- 整数の桁数を求める(for文を使用)
- 整数の桁数を求める(while文を使用)
- 割り算(除算)について
- 0.0に近い値
- 整数の割り算(除算)について
- double型のもつ誤差
- 計算順序による計算結果の違い
- do~while文
- ドライブの容量の取得
- 縁付き画像変換
- エッジ(境界)検出
- エンディアン
- 月末の日付を取得
- 正三角形の描画
- 1~10の中の偶数
- 1~10の中の偶数
- 画像の2倍拡大
- 指数表記とは
- ファイルの有無を判定
- ファイルのリストを取得
- ファイルからbyte配列
- final修飾子
- finally句
- 画像の上下反転
- for文
- 黄金角とは
- グラフの表示
- グラデーション画像(横方向)
- グラデーション画像(放射状)
- グラデーション画像(4隅の色)
- グレースケール変換
- より自然なグレースケール変換
- 8ビットのグレースケールに変換
- 時分秒変換
- 複利計算(元利合計)
- Javaで利用可能な画像フォーマット
- RGBの平均値
- 画像の大きさの取得
- インクリメント、デクリメント演算子
- インデント
- インスタンス
- 内角
- 3辺の長さで三角形かを判定
- 「じゃんけん」の作成 その1
- 「じゃんけん」の作成 その2
- Javaプログラミングの基礎
- 簡単な画像処理プログラム
- 九九(くく)の表を作る
- 九九(くく)の表を作る その2
- 九九(くく)の表を作る その3
- 九九(くく)の表を作る その4
- 九九(くく)の表を作る その5
- 値の探索(整数)
- リテラルとは
- 文字の間違い探し
- トランプの操作
- 数学関数(絶対値)
- 数学関数 逆三角関数 acos
- 球の表面積/体積計算
- 円の面積計算
- 立方体の表面積/体積計算
- 直方体の表面積/体積計算
- 平行四辺形の面積計算
- 台形の面積計算
- 三角形の面積計算
- 数学関数 逆三角関数 asin
- バビロニアの平方根
- 円周率πを計算で求める その1
- 公約数
- 数学関数 三角関数 cos
- 数学関数(2点間の距離 - 3次元)
- 直線と点の距離
- 偶数・奇数の判定
- フィボナッチ数列
- フィボナッチ数列(再帰)
- フィボナッチ数列(配列)
- 最大公約数 その1
- 最大公約数 その2
- ユークリッド互除法
- 格子座標から円周率πを計算
- 三角形の面積計算(ヘロンの公式)
- 円周率πを計算で求める その2
- 数学関数(中央値)
- 数学関数(最小値・最大値)
- 数学関数(複数の値の最小値と最大値)
- 3つの値の最大・最小
- 数学関数(最頻値)
- ニュートン法で平方根
- ニュートン法で平方根 その2
- ニュートン法で平方根 その3
- 数値微分
- 完全数
- 各位(くらい)の値を求める
- 指定の位(くらい)の値を求める
- 10のN乗かを判定
- 素数判定
- 素数リスト作成
- N番目の素数
- 二次方程式の解の公式
- 回転行列
- 数学関数 三角関数 sin
- 値の2乗
- 整数の平方根計算
- 1からNの和
- 数学関数(複数の値の合計と平均)
- メモリ容量の取得
- メソッド
- 画像のミラー反転
- モンティ・ホール問題
- 多重ループ
- short型の掛け算(乗算)
- 足し算とビットシフトによる掛け算
- 画像のサイズを取得
- 画像をセピア色にする
- 画像の一部を切り出す
- 画像をPNG形式に変換
- N値化
- 値上げ率の計算
- 画像の色反転
- ノイズ画像の作成
- 画像にノイズを加える
- 正確な割合のノイズ画像作成
- 同じ数の組み合わせ
- 指定色の画素数取得
- オブジェクト指向
- 1~10の中の奇数
- 1~10の中の奇数
- 象限
- JDKパス設定
- 塗りつぶし円
- 円模様(円の整列)
- 円模様2(隙間の少ない整列)
- 同心円模様
- 市松模様
- 水平線模様
- 傾き45°縞模様
- 垂直線模様
- 放射状模様
- 円周上のランダムな座標を求める その1
- 円周上のランダムな座標を求める その2
- 円周上のランダムな座標を求める その3
- ポーカーの役判定
- 極座標系
- 素因数分解
- 値のコンソール表示
- 書式指定でコンソール出力
- プロパティ
- クイックソート
- 乱数で文字列を生成
- 予約語と定数
- return文
- お米の重さ計算
- 利益率の計算
- キーボードで実数(double)を入力
- キーボードで2つの実数(double)を入力
- キーボードで整数を入力
- キーボードで2つの整数を入力
- キーボード入力した角度のsin、cosを計算
- キーボード入力した値の絶対値
- キーボード入力した値を2乗(自乗)
- 神経衰弱 その4
- 神経衰弱 その5
- 画像をぼかす
- 空間フィルタリング
- 平方表の作成
- 掛け算なしで平方表の作成
- 平方根表の作成
- ステンドグラス風画像
- ストップウォッチ その1
- ストップウォッチ その2
- 2つ文字列が等しいかを判定
- Javaのプログラム構成
- 画像の一部切り出し
- switch文
- 円を描く(テキスト版)
- 市松模様(テキスト版)
- 横縞模様(テキスト版)
- 三角形を描く(テキスト版) その1
- 三角形を描く(テキスト版) その2
- 三角形を描く(テキスト版) その3
- 三角形を描く(テキスト版) その4
- プログラムを一定時間停止する
- 2倍と左ビットシフトの速度
- 時間計測
- 三角関数表の作成 その1
- 三角関数表の作成 その2
- 三角関数表の作成 その3
- 引数の型キャスト
- 型キャスト
- 単位ベクトル
- 閏年(うるうどし)の判定
- 閏年(うるうどし)の判定 その2
- 変数の初期値
- 変数の初期値は?
- 16進数の代入
- for文で変数名iがよく使われる理由
- 無限大 Infinity
- 変数の最小値・最大値
- 変数名の付け方
- null
- 8進数の代入
- オーバーフロー・アンダーフロー
- 変数にnullを代入できる?
- 変数値の交換
- 値の交換クラス
- 変数について
- while文
- 絶対値(abs)グラフの表示
- マンハッタン距離
- 数学関数(小数点以下四捨五入)
- 数学関数(符号)
- tan(タンジェント)
- 三項演算子
- 閾値とは