2015-10-20 28 views
2

嘿我需要做一個程序,倒計時天數/小時/分/秒,直到y2k38我得到的代碼,但我有一個邏輯錯誤,並得到錯誤的數字小時分鐘和秒。我的繼承人代碼:在我的計算y2k38倒計時錯誤

public class Assignment1 { 
public static void main(String[] args) { 
long now = System.currentTimeMillis(); 
// The problem will occur at 2^31 seconds 
long y2k38 = (long) Math.pow(2, 31)*1000; 
// Assigning the time intervals values based on eachother 
long diffsec = (y2k38-now)/1000; 
long diffmin = diffsec/60; 
long diffhours = diffmin/60; 
long diffdays = diffhours/24; 
// issuing a print statement to output the days,hours..etc until y2k38 
System.out.printf(
    "%d days\n"+ 
    "%d hours\n"+ 
    "%d minutes\n"+ 
    "%d seconds\n", 
    (diffdays),(diffmin%60), (diffsec%3600),(diffsec%60)); 
} 

} 
+1

有什麼錯誤計算Y2K38價值?你有什麼價值?你期待什麼? – yngwietiger

+0

'diffsec%3600'給你一個從0到3599的值;這真的是你想要打印的「分鐘」? – ajb

回答

0

你的計算都非常奇怪,你可以修改,並打印出來,如下所示:

long diffsecs = (y2k38 - now)/1000; 
    long diffmins = (diffsecs/60) % 60; 
    long diffhours = (diffsecs/60/60) % 24; 
    long diffdays = diffsecs/60/60/24; 
    diffsecs  = diffsecs % 60; 

    System.out.printf("%d days, %d hours, %d minutes, d seconds\n", 
     diffdays, diffhours, diffmins, diffsecs); 

這給了你這樣的:

8126 days, 22 hours, 42 minutes, 21 seconds 

這大致匹配你需要什麼。

0

您正在將差值轉換爲總日/小時/分鐘/秒。相反,您希望從查找日子開始,並使用提醒查找小時數等等。

long diff = y2k38 - now; 
long diffdays = diff/(24*60*60*1000); 
diff = diff%(24*60*60*1000); 
long diffhours = diff/(60*60*1000); 
diff = diff%(60*60*1000); 
long diffmin = diff/(60*1000); 
diff = diff%(60*1000); 
long diffsec = diff/1000; 

而且它的速度更快的

long y2k38 = ((long)(Integer.MAX_VALUE) + 1)*1000;