Java:查找最接近特定负数的数组列表中的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:查找最接近特定负数的数组列表中的值相关的知识,希望对你有一定的参考价值。

我的问题是如何编写一个方法,将一个Doubles的ArrayList作为参数,并返回最接近-3.75的数组列表中的Double。

我得到了正数3.42的代码,但我坚持修改它以适应-3.75

public static double question3(ArrayList<Double> input) {

    double myNum = 3.42.;
    double dist = Double.POSITIVE_INFINITY;
    double closest = 0.0;

    for (Double s : input) {
        if (Math.abs(Math.abs(s) - myNum) < dist) {
            dist = Math.abs(Math.abs(s) - myNum);
            closest = s;
        }
    }
    System.out.println(closest);
    return closest;
}

有帮助吗?或者更好的方法来执行此任务?

答案

如果不是你重新发明轮子的明确目标,你可以使用streammin和自定义比较器:

public double findClosestTo(ArrayList<Double> arr, double value) {
  return arr.stream().min(
    Comparator.<Double>comparingDouble(x -> Math.abs(x - value))
  ).get();
}

如果数组为空,get部分(来自Optional)将抛出错误。

另一答案

在这里,你得到了s的绝对值:

if (Math.abs(Math.abs(s) - myNum) < dist) {
             ^^^^^^^^^^^

这意味着数组中的每个负数都将被视为正数。这就是为什么你的方法找不到-3.75的正确最接近数字的原因。

只需删除abs电话:

if (Math.abs(s - myNum) < dist) {

或者,像这样使用Stream API:

return input.stream()
    // compares the value of Math.abs(x - myNum), where x is each element of input
    .min(Comparator.comparingDouble(x -> Math.abs(x - myNum)))
    // returns positive infinity if there is nothing in "input"
    .orElse(Double.POSITIVE_INFINITY);

但由于这看起来像家庭作业,我怀疑将接受Stream API方法......

以上是关于Java:查找最接近特定负数的数组列表中的值的主要内容,如果未能解决你的问题,请参考以下文章

用Java编写,在给出的数字里面找三个数字的和等于或者最接近513.91的。在线等,用上数组最好。

C++:查找数组中最接近的值

在数组中查找匹配或最接近的值

Excel - 在同一个列表中查找最接近的值

在数组中查找三个元素之和最接近给定数字

在排序数组列表中查找2个最接近的先前值和2个最接近的下一个值