Нахождение возраста на разных планетах - PullRequest
0 голосов
/ 26 февраля 2010

Я пишу программу, которая запрашивает у пользователя дату его рождения, а затем вычисляет его возраст в годах на разных планетах. Я не должен предполагать, как вводить дату рождения, за исключением того, что между каждым числом есть один пробел.

Код, который я сейчас имею, не соответствует этим спецификациям, и я не уверен, как его написать иначе. У меня также есть проблема с подсчетом моего возраста сегодня. Когда я вписываю свою дату рождения и распечатываю возраст, в настоящее время мне сообщают, что мне 407, но когда я распечатываю dateBirth и сегодня, обе эти даты верны.

System.out.print("Please enter your birthdate (mm dd yyyy): ");
birthdate = scan.nextLine();

DateFormat df = new SimpleDateFormat("MM dd yyyy");
Date dateBirth = df.parse(birthdate);
Calendar calBirth = new GregorianCalendar();
calBirth.setTime(dateBirth);

Calendar calDay = new GregorianCalendar();
today = calDay.getTime();
age = (today.getTime() - dateBirth.getTime()) / (1000 * 60 * 60 * 24 * 365);

Ответы [ 3 ]

6 голосов
/ 26 февраля 2010

1000 * 60 * 60 * 24 * 365 на самом деле 31536000000, что больше, чем Integer.MAX_VALUE, это вызывает переполнение. Как целое число оно будет оценено как 1471228928, что приведет к неверному результату.

Решением является добавление буквы L к одной из ваших констант

long div = ( 1000 * 60 * 60 * 24 * 365L );
long age = ( today.getTime() - dateBirth.getTime() ) / div;
2 голосов
/ 26 февраля 2010
1000 * 60 * 60 * 24 * 365

Является ли int, но его долго держать. Сделайте один из них длинным, как:

1000L * 60 * 60 * 24 * 365
2 голосов
/ 26 февраля 2010

Вы должны проверить, соответствует ли выражение 1000 * 60 * 60 * 24 * 365 ожидаемому результату, и если нет, найти способ получить ожидаемый результат. Возможно, вам даже следует подумать, что на Земле у нас есть так называемые високосные годы, и вы можете отметить свой вопрос как домашнее задание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...