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



我的问题是我如何编写一个方法,该方法将双精度数组列表作为参数,并在数组列表中返回最接近 -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) {

或者,使用如下所示的流 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);

但由于这看起来像家庭作业,我怀疑流 API 方法是否会被接受......

相关内容

  • 没有找到相关文章

最新更新