我有一个 double 列表
:
List<Double> aList = Arrays.asList(100.33,300.99,600.0,900.44,1200.88,1500.15);
我需要从该列表中找到给定值的最接近的值。我尝试了以下来自 SO 另一个答案的解决方案,但到目前为止这不起作用,idx
始终为 0。
以下是我正在检查的解决方案:
private Double chekcer() {
int myNumber = 900;
double distance = (aList.get(0)- myNumber);
int idx = 0;
for (int c = 1; c < aList.size(); c++) {
double cdistance = (aList.get(c) - myNumber);
if (cdistance < distance) {
idx = c;
distance = cdistance;
}
}
Log("",...);
return aList.get(idx);
}
最佳答案
您应该使用差异的绝对值,它可能高于或低于 0
尝试
private Double chekcer() {
int myNumber = 900;
double distance = Math.abs(aList.get(0)- myNumber);
int idx = 0;
for (int c = 1; c < aList.size(); c++) {
double cdistance = Math.abs(aList.get(c) - myNumber);
if (cdistance < distance) {
idx = c;
distance = cdistance;
}
}
Log("",...);
return aList.get(idx);
}
编辑
这是我的全部代码,
public static void main(String[] args) {
System.out.println(chekcer());
}
private static Double chekcer() {
List<Double> aList = Arrays.asList(100.33,300.99,600.0,900.44,1200.88,1500.15);
int myNumber = 900;
double distance = Math.abs(aList.get(0)- myNumber);
int idx = 0;
for (int c = 1; c < aList.size(); c++) {
double cdistance = Math.abs(aList.get(c) - myNumber);
if (cdistance < distance) {
idx = c;
distance = cdistance;
}
}
return aList.get(idx);
}
输出
900.44
关于java - 从 Double 数字列表中获取给定值的最接近索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703694/