2016-03-11 5 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» является абсолютным значением в градусах К за единицу времени, поэтому здесь нет парадокса. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^