我有以下代码:
for(int i=0; i<a.length; i++){
diff[i] = a.getTime() - b.getTime();
}
a.getTime() = time in array.
b.getTime() = current time on computer.
找出哪一个a.getTime最接近当前时间的最佳方法是什么?
输出差异:
-143214521
32942394
-132931
-21340
答案 0 :(得分:2)
保持差异的绝对值(使用Math.abs
),并跟踪到目前为止看到的最小值以及它出现的索引。
例如:
long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
int minIndex = -1;
for(int i=0; i < a.length; i++) {
diff[i] = a[i].getTime() - currentTime;
long abs = Math.abs(diff[i]);
if (abs < minAbsDiff) {
minAbsDiff = abs;
minIndex = i;
}
}
这假设您在其他地方仍然需要diff[i]
。如果不这样做,并且只需要具有最小差异的a
值,则可以更紧凑地编写它:
long currentTime = b.getTime(); // Only call once, to be consistent
long minAbsDiff = Long.MAX_VALUE;
WhateverType minContainer = null;
for (WhateverType x : a) {
long abs = Math.abs(x.getTime() - currentTime);
if (abs < minAbsDiff) {
minAbsDiff = abs;
minContainer = x;
}
}
答案 1 :(得分:1)
对每个结果执行Math.abs(long)
并使用最低结果。
(创建一个类型为long[]
的数组,将abs()值放入其中,然后使用Arrays.sort()
对其进行排序。
顺便说一下,你可能只想做b.getTime()
一次。
答案 2 :(得分:1)
long min = Long.MAX_VALUE;
long current = b.getTime();
int index = -1;
for(int i=0; i<a.length; i++) {
long diff = Math.abs(current - a.getTime());
if(diff < min) {
min = diff;
index = i;
}
}