获取数组中数字的最接近的值

2022-09-01 05:39:44

我有一个正/负整数数组

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 的数字。

例如,如果我使用数字,我会从数字中取回项目#4,做这样的事情的最佳方法是什么?490500

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

这是行不通的。关于执行此操作的好方法的任何建议?


答案 1
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_VALUEInteger.MIN_VALUE 这样的东西是一种天真的方法来获取你的答案;如果您稍后更改数据类型(哎呀,而且非常不同!)或者将来想要为任何数据类型编写泛型方法,那么它就站不住脚了。MAX_LONGMAX_INTmin/max


答案 2

Java 8中

List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());

int n = 490;

int c = list.stream()
            .min(Comparator.comparingInt(i -> Math.abs(i - n)))
            .orElseThrow(() -> new NoSuchElementException("No value present"));

最初,您可以使用 a 而不是 an(列表具有更多功能)。ListArray