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;
}
有帮助吗?或者更好的方法来执行此任务?
答案
如果不是你重新发明轮子的明确目标,你可以使用stream
的min
和自定义比较器:
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:查找最接近特定负数的数组列表中的值的主要内容,如果未能解决你的问题,请参考以下文章