2011-10-12 73 views
1

我試圖解決一個任務,我必須做的就是計算星星時間和結束時間之間的秒數,比如一場比賽。格式爲hhmmss。以秒爲單位最後以小時和分鐘計算結果。這是一個非目標編程的初學者課程,所以我使用的代碼必須簡單,沒有任何額外的類來處理時間。我問的原因是因爲我的計算有時會計算出錯誤的結果。我做了這樣的事情:計算Java中開始和結束之間的秒數?

totalAmountOfSecondsPerHour = (endHour - startHour) * 3600; 
totalAmountOfMinutesPerMinutes = Math.abs((endMinutes - startMinutes) * 60); 
totalAmountOfSeconds = Math.abs(endSeconds - startSeconds)); 

我使用Math.abs來擺脫負數。

要獲得以秒爲單位的總金額,我添加所有變量。最後得到的HHMMSS結果時我這樣做:

resultHour = totalAmountOfSeconds/3600; 
rest totalAmountOfSeconds % 3600; 

resultMinutes = rest/60; 
resultSeconds = rest % 60; 

當我輸入出發時間像150030和結束時間,像165015的結果是1小時50分鐘15秒。我想我應該更正確,如果它是45秒!?我的計算有什麼不對?有沒有更好的方法,或者我可以修改或簡化我的代碼,做出正確的結果?請提供一些幫助!謝謝!

+0

我會擺脫Math.abs檢查,因爲LastCoder指出,你失去了你的精度。我只是做一個檢查,以確保endSeconds> = startSeconds。如果沒有,退出。 –

+0

你從哪裏開始並結束變量? –

回答

3

這是因爲您使用Math.abs()

讓給你一個小例子:應用開始於00:00 :59和完成2秒後在如此0時01分01秒

totalAmouneOfMinutesPerMinutes = Math.abs(1 - 0) * 60 = 60 
totalAmountOfSeconds = Math.abs(1 - 59) = 58 

所以60 + 58 =118秒代替。如果我們除去Math.abs,我們將有:

totalAmouneOfMinutesPerMinutes = (1 - 0) * 60 = 60 
totalAmountOfSeconds = (1 - 59) = -58 

60 +(-58)= 2秒(就像它假設的那樣)。

+0

不錯,如果我這樣做會更好(startSeconds-60)+ endSeconds總是得到正確的秒數?我想我不需要任何IF來檢查呢?!我想我也必須在幾分鐘內做同樣的事情? –

+0

如果你這樣做(startSecond-60)+ endSecond,你有同樣的問題。嘗試使用startSecond = 1和endSecond = 3 ... – Nettogrof

+0

嗯,但我該如何解決它?用IF語句來檢查endSeconds是否更大,或?! –

2

爲了您秒鐘calc下你基本上是做

15 - 30 = -15 ABS(-15)= 15

所以這是你的問題。

你可能想嘗試,如果秒爲負,則加60

+0

嗨,你能解釋一下我做了什麼錯嗎?我應該怎麼做呢? –

1

以開始時間:1:10:10和結束時間1:11:05爲例,顯然差異應該是55秒。

但你做秒(5-10),並獲得5秒。你會得到1分5秒。

你有兩種方法可以解決這個問題:擺脫abs,而是如果你得到一個否定的結果,將(負數)量加到下一個「更高」值的量上。

因此,在該示例中,不是將abs(-5)添加到1分鐘,而是將-5加1分鐘,結果爲0分鐘和55秒。

雖然這將起作用,但會變得相當混亂。

更好的方法是:將開始和結束時間轉換爲秒。採取差異。將結果轉換回小時,分鐘和秒

+0

嗨,我最終喜歡你的解決方案,我只是想知道它的工作是否正確?我有一個開始時間:150030和結束時間:165015.結果是1小時49分45秒。不是50分鐘? –

+0

想一想:150030到165030會是1小時50分00秒。 –

0

那些Math.abs讓你跳起來......將時間轉換爲秒,做減法,然後轉換回hhmmss格式。

相關問題