2016-03-11 64 views
-1

該程序是關於一個溫暖的物體放入冰箱後的溫度計算。冷凍室溫度恆定在-20度。一旦物體進入冷凍室,溫度每秒下降(K * dt)度,其中K = 0.001,dt是當前物體溫度和冷凍室溫度之間的差值。 該任務要求我的方法應計算物體從給定的初始溫度冷卻直至達到小於或等於目標溫度的溫度所花費的時間(秒)。用於計算變量等於或小於目標數量所用時間的方法? Java

結果應該是一個int值。 如果目標溫度小於或等於冷凍室溫度,該方法應返回值-1。 在這個解決方案中,我必須使用一個循環來跟蹤對象的溫度變化。我不知道如何實現timeToCool方法。這是我到目前爲止:

public static int timeToCool(double initialTemperature, double targetTemperature) { 
     return 0; 
    } 

    public static void timeToCoolTest(double initialTemperature, double targetTemperature) { 
     System.out.println("### Time To Cool"); 
     System.out.println("Initial temperature = " + initialTemperature); 
     System.out.println("Target temperature = " + targetTemperature); 
     int timeTaken = timeToCool(initialTemperature, targetTemperature); 
     System.out.println("Time to cool = " + timeTaken + " seconds\n"); 
    } 

任何幫助表示讚賞謝謝:)。

+0

好奇分配。如果你知道微積分,它可以用一個方法調用完成。 – EJP

+1

這是一個數學問題,它需要求解一階線性微分方程,這是一個指數函數。但是由於你的標籤之一是「循環」,這可能意味着你的任務是嘗試用數值算法解決它(它會收斂很慢)。您可以搜索這些條款。 –

回答

1

當達到-20°時,你需要想出一種不同的方式來計算冷卻時間,因爲最終發生的逐步冷卻變得無限小,永遠不會達到-20°。

與芝諾的悖論類似的行爲。

您可以使用此代碼嘗試一下:

while (initialTemperature > targetTemperature) 
    initialTemperature -= 0.001 * (initialTemperature - targetTemperature); 
+0

'dt'是單位時間的絕對值,單位是K,所以這裏沒有悖論。 –

+0

當然有,它是絕對的,它總是正面清晰。但它會變得無限小。例如。當差值爲1°時,溫度只會下降0.001°,此後一步將下降0.999 * 0.001。你可以試試我的代碼,或者自己寫,然後它可能會變得更清晰。 –

+0

我現在看到變量'dt'的命名很混亂,因爲它經常引用時間差異。上面它被定義爲溫差。 –

0

這是做什麼你問一個方法:

public static int timeToCool(double initial, double target) { 
    if (initial < target) return -1; 
    double K = 0.001; 
    int time = 0; 
    while (initial > target) { 
     int dt = (initial - target); 
     initial -= K * dt; 
     time++; 
    } 
    return time; 
}