2016-03-11 2 views
-1

Le programme consiste à calculer la température d'un objet chaud après l'avoir placé dans un congélateur. La température du congélateur est constante à -20 degrés. Une fois que l'objet est dans le congélateur, sa température baisse de (K * dt) degrés par seconde, où K = 0,001 et dt est la différence entre la température de l'objet actuel et la température du congélateur. La tâche exige de moi que la méthode calcule le temps en secondes qu'il faut pour que l'objet refroidisse à partir de la température initiale donnée jusqu'à ce qu'il ait atteint une température inférieure ou égale à la température cible.Méthode de calcul du temps nécessaire pour qu'une variable soit égale ou inférieure au nombre cible? Java

Le résultat devrait être une valeur int. La méthode doit renvoyer la valeur -1 si la température cible est inférieure ou égale à la température du congélateur. Dans la solution, je dois utiliser une boucle qui suit la température changeante de l'objet, seconde par seconde. Je ne sais pas comment implémenter la méthode timeToCool. Voici ce que j'ai jusqu'à présent:

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

Toute aide est appréciée merci :).

+0

mission curieuse. Cela peut être fait avec un appel de méthode, si vous connaissez le calcul. – EJP

+1

Il s'agit d'une question mathématique, elle nécessite de résoudre une équation différentielle linéaire du premier ordre, qui est une fonction exponentielle. Mais comme l'un de vos tags est "loops", cela signifie probablement que votre mission est d'essayer de le résoudre avec un algorithme numérique (il convergera très lentement). Vous pouvez rechercher ces termes. –

Répondre

1

Vous devez penser à une manière différente de calculer le temps de recharge en atteignant -20 °, car vers la fin, le temps de recharge qui arrive devient infiniment petit et n'atteindra jamais -20 °.

Comportement similaire au paradoxe de Zeno.

Vous pouvez l'essayer avec ce code:

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

Le 'dt' est une valeur absolue en degrés K par unité de temps, donc il n'y a pas de paradoxe ici –

+0

Bien sûr qu'il y a, c'est absolu dans le sens d'être toujours positif clairement. Mais il deviendra infiniment petit. Par exemple. lorsque la différence est de 1 °, la température ne descendra que de 0,001 °, et un pas après, elle baissera de 0,999 * 0,001. Vous pouvez essayer mon code, ou écrire le vôtre, alors cela deviendra probablement plus clair. –

+0

Je vois maintenant que la dénomination de la variable 'dt' est confuse car elle fait souvent référence à la différence de temps. Au-dessus, il est défini comme la différence de température. –

0

C'est une façon de faire ce que vous demandez:

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