В качестве предположения, почему ваш код застревает, это может быть связано с тем, что оператор% = используется для двойных чисел. Оператор% (модуль) может использоваться только для целых чисел, поскольку он возвращает остаток после целочисленного деления. Он не работает с двойными числами, потому что вы получили бы десятичное число вместо целого числа.
Вот версия вашего кода, которую я считаю упрощенной, и некоторые критические замечания.
double convertToDuration(double time) // using time instead of duration, because it's not the duration yet
{
double minutes = Math.floor(time); // returns the part in front of the decimal
double seconds = time - minutes; // returns the decimal
while (seconds > .59)
{
minutes += 1;
seconds -= .60;
}
return minutes + seconds;
}
Что касается критики, у меня есть пара предложений, которые можно улучшить по мере продвижения вперед. Во-первых, использовать более описательные имена переменных. addTimesIn
и addTimes
ничего не значат для меня. Кроме того, с именем, подобным doubleToDuration
, не имеет смысла вводить duration
, поскольку это то, что звучит, вы будете возвращаться.
Во-вторых, лично я не люблю использовать петли while(true)
. Это просто личный стиль, но в вашем случае, когда у вас есть if
и else
с оператором break;
, имеет смысл использовать определенное условие внутри цикла while.
// good
while (seconds > .59)
{
minutes += 1;
seconds -= .60;
}
// not as good
while(true)
{
if(seconds > .59)
{
minutes += 1;
seconds -= .60;
}
else
{
break;
}
}
Я знаю, что не знаю проблемы в явном виде, но я не знаю, почему у вас есть countTillHundred
и эта неуклюжая петля for
. Если это только для обращения, я не понимаю, где вам это понадобится.
Первая строка также не имеет смысла для меня. Единственная причина, по которой я это вижу, в том, что у вас есть время, прошедшее с точностью более 2 десятичных знаков. Может быть, есть некоторая форма проверки ввода перед входом в функцию.
Эта функция должна просто запускать преобразования, она также не должна отвечать за очистку входных данных, считая до 100, и преобразование.
Извините, если что-то показалось слишком резким. Удачи в вашем курсе!