2010-11-29 122 views
0

我有下面的代碼的java毫秒找到最接近當前時間

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的一個最接近當前時間的最好方法?

輸出DIFF:

-143214521 
32942394 
-132931 
-21340 

謝謝!

回答

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

對每個結果做Math.abs(long)並使用最低的一個。

(創建long[]類型的數組,把ABS()值內,然後排序它使用Arrays.sort()

順便說一句,你可能想要做b.getTime()只有一次。

+0

此外,您可以擺脫'長[]數組`和公正記錄迄今爲止計算的最低值。 – 2010-11-29 08:36:14

+0

當然,但我的方式可能更容易爲初學者。 – 2010-11-29 08:37:47

+0

或者你可以創建一個'Long'類型的列表並使用`Collections.min`。 – dogbane 2010-11-29 08:45:11

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; 
    } 
}