2016-05-15 3 views
0

Я иду через ThinkJava Version 6.1.0 (последняя версия) и в главе 2 Упражнение 2.3, я застрял на # 5, который спрашивает: «Рассчитать и отобразить процент дня, который прошло. Вы можете столкнуться с проблемами при вычислении процентов с целыми числами, поэтому рассмотрите возможность использования с плавающей запятой ».Вычислить и отобразить процент пропущенного времени

Я попытался получить процент, но я не получаю правильный результат.

Я закончил первые 4 вопроса. Вот что у меня есть до сих пор:

public class Date { 

    public static void main(String[] args) { 

     int hour = 13, minute = 58, second = 45; 
     double percentage; 
     double secondsSinceMidnight = second + (minute * 60) + (hour * 3600); 
     double secondsRemainingInDay = (60-second) + ((60-1-minute)*60) + (24-1-hour)*3600; 

     percentage = (secondsSinceMidnight * 100)/60; 

     System.out.println("Number of seconds since midnight:"); 
     System.out.println(secondsSinceMidnight); 

     System.out.println("Number of seconds remaining in the day:"); 
     System.out.println(secondsRemainingInDay); 

     System.out.println("Percentage of the day past:"); 
     System.out.println(percentage + "%"); 
    } 
} 

Благодарим за помощь и поддержку!

+0

попытайтесь использовать с плавающей запятой вместо любого двойника, добавьте после него .00. То есть 60 -> 60,00; 1 -> 1,00. –

ответ

1

Пожалуйста, проверьте формулу для расчета процента прошедшего дня.

percentage = (secondsSinceMidnight * 100)/60; 

Не похоже на меня. Это должно быть что-то вроде

percentage = 100 * secondsSinceMidnight/totalSecondsInDay; 

totalSecondsInDay может быть суммой secondsRemainingInDay и secondsSinceMidnight

+0

Большое спасибо @Stefan! Это полностью помогло мне. По какой-то причине я просто не мог окутать голову в вычисление процента. – Nerkzor

0

я думаю, что ваш код имеет проблемы с типом литья

в строке 3 обмена междунар с двойным:

double hour = 13, minute = 58, second = 45; 

или есть проблема с постоянными числами, писать цифры таким образом: 60,0 вместо 60

+0

Я изменил все мои переменные на двойные, и используя @Stefan ответ, он полностью работал, и я смог решить свою проблему. Спасибо. – Nerkzor

0

Вот пример с закодированным временем. Очевидно, это в военное время, поэтому имейте это в виду.

public class Time 
{ 
    public static void main(String[] args) { 
     int startHour = 12;   //when you start editing program 
     int startMinute = 00; 
     int startSecond = 00; 
     System.out.print("Number of seconds since midnight: "); 
     startMinute = (startHour * 60 + startMinute); 
     startSecond = (startMinute * 60 + startSecond); 
     System.out.print(startSecond); 
     System.out.println(" seconds"); 

     int secondInADay = 86400; //number of seconds in a day 
     System.out.print ("Seconds remaining in the day: "); 
     System.out.println (secondInADay - startSecond); 

     System.out.print("Percent of the day that has passed: "); 
     double startSeconds = 43200; //number of seconds that have passed in a day at start of editing program 
     System.out.println(startSeconds * 100/86400); 

     int endHour = 16;    //time when finished editing program 
     int endMinute = 00; 
     int endSecond = 00; 

     System.out.print ("Difference = ");  //difference in time from start to finish 
     endMinute = (endHour * 60 + endMinute); 
     endSecond = (endMinute * 60 + endSecond); 
     System.out.print (endSecond - startSecond); 
     System.out.print (" seconds"); 
    } 
} 
Смежные вопросы