35

私は正/負のintの配列を持っています

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];

それはうまくいきません。これを行うための良い方法に関する提案はありますか?

4

13 に答える 13

49
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_VALUEorのようなものを使用することInteger.MIN_VALUEは、答えを得る単純な方法です。MAX_LONG後でデータ型を変更した場合 (おっと、非常に異なっています!)、または将来、任意のデータ型のジェネリックメソッドMAX_INTを記述したい場合は、うまく保持できません。min/max

于 2012-11-10T02:52:19.143 に答える
4

あなたはとても近いです。'distance'の初期値は、0ではなく大きな数値にする必要があると思います。cdistanceには絶対値を使用します。

于 2012-11-10T02:47:17.233 に答える
3

cdistance = numbers[c] - myNumber。あなたは違いの絶対値を取っていません。myNumberがはるかに大きい場合、またはnumbers[c]numbers[c]負の場合、比較は「最小差」として登録されます。

たとえば、numbers[c] = -34200numbers[c] - myNumberその場合、-34690になり、。よりもはるかに少なくなりdistanceます。

また、distance最初は解決策が見つからなかったため、大きな値に初期化する必要があります。

于 2012-11-10T02:48:03.397 に答える
1
public int getClosestToTarget(int target, int[] values) {

    if (values.length < 1)
        throw new IllegalArgumentException("The values should be at least one element");
    if (values.length == 1) {
        return values[0];
    }
    int closestValue = values[0];
    int leastDistance = Math.abs(values[0] - target);
    for (int i = 0; i < values.length; i++) {
        int currentDistance = Math.abs(values[i] - target);
        if (currentDistance < leastDistance) {
            closestValue = values[i];
            leastDistance = currentDistance;
        }
    }
    return closestValue;
}
于 2017-04-05T10:44:54.437 に答える
0

私はこれを自分のコースの課題として行い、Ready to Program Java でプログラミングしました。少し混乱した場合は申し訳ありません。

// The "Ass_1_B_3" class.
import java.awt.*;
import hsa.Console;

public class Ass_1_B_3
{
    static Console c;           // The output console

    public static void main (String[] args)
    {
        c = new Console ();

        int [] data = {3, 1, 5, 7, 4, 12, -3, 8, -2};
        int nearZero = 0;
        int temp = 0;
        int temp2 = data[0];

        for (int i = 0; i < data.length; i++)
        {
            temp = Math.abs (data[i]);
            nearZero = temp2;   
            if (temp < temp2)
            {
                temp2 = temp;
                nearZero = data[i];
            }


        }

        c.println ("The number closest to zero is: " + nearZero);

        // Place your program here.  'c' is the output console
    } // main method
} // Ass_1_B_3 class
于 2016-02-19T03:09:56.460 に答える
-7

これが私がしたことです...

import javax.swing.JOptionPane;

public class NearestNumber {

public static void main(String[] arg)
{
    int[] array={100,-3420,3040,400433,500,-100,-200,532,6584,-945};

    String myNumberString =JOptionPane.showInputDialog(null,"Enter the number to test:");
    int myNumber = Integer.parseInt(myNumberString);

    int nearestNumber = findNearestNumber(array,myNumber);

    JOptionPane.showMessageDialog(null,"The nearest number is "+nearestNumber);
}

public static int findNearestNumber(int[] array,int myNumber)
{

    int min=0,max=0,nearestNumber;

    for(int i=0;i<array.length;i++)
    {
        if(array[i]<myNumber)
        {
            if(min==0)
            {
                min=array[i];
            }
            else if(array[i]>min)
            {
                min=array[i];
            }
        }
        else if(array[i]>myNumber)
        {
            if(max==0)
            {
                max=array[i];
            }
            else if(array[i]<max)
            {
                max=array[i];
            }
        }
        else
        {
            return array[i];
        }
    }

    if(Math.abs(myNumber-min)<Math.abs(myNumber-max))
    {
        nearestNumber=min;
    }
    else
    {
        nearestNumber=max;
    }

    return nearestNumber;
}

}

于 2012-11-10T10:06:18.110 に答える