正/負の整数の配列があります
int[] numbers = new int[10];
numbers[0] = 100;
numbers[1] = -34200;
numbers[2] = 3040;
numbers[3] = 400433;
numbers[4] = 500;
numbers[5] = -100;
numbers[6] = -200;
numbers[7] = 532;
numbers[8] = 6584;
numbers[9] = -945;
ここで、この配列に対して別のintをテストし、intに最も近い数値を返します。
たとえば、番号を使用した場合、番号490
から項目#4を取得します500
。このようなことを行うための最良の方法は何ですか?
int myNumber = 490;
int distance = 0;
int idx = 0;
for(int c = 0; c < numbers.length; c++){
int cdistance = numbers[c] - myNumber;
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];
それはうまくいきません。これを行うための良い方法について何か提案はありますか?
int myNumber = 490;
int distance = Math.abs(numbers[0] - myNumber);
int idx = 0;
for(int c = 1; c < numbers.length; c++){
int cdistance = Math.abs(numbers[c] - myNumber);
if(cdistance < distance){
idx = c;
distance = cdistance;
}
}
int theNumber = numbers[idx];
常に、考慮している最初の要素で最小/最大関数を初期化します。Integer.MAX_VALUE
またはのようなものを使用することInteger.MIN_VALUE
は、答えを得るための素朴な方法です。それはあなたが後でデータ型を変更した場合(おっと、うまくホールドアップしないMAX_LONG
とMAX_INT
非常に異なっている!)かあれば、将来的には、一般的な書きたいmin/max
のための方法の任意のデータ型を。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加