寻找不同星球上的年龄

时间:2010-02-26 17:06:35

标签: java string user-input

我正在编写一个程序,询问用户他们的出生日期,然后计算他们在不同行星的年龄。我不想假设如何输入生日,除了每个数字之间有一个空格。

我现在的代码现在不符合这些规范,我不知道如何写它。我也有计算今天我的年龄的问题。当我输入我的出生日期并打印出年龄时,它现在告诉我,当我打印出dateBirth时,我已经是407了,今天这两个日期都是正确的。

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 个答案:

答案 0 :(得分:6)

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;

答案 1 :(得分:2)

您应该检查表达式1000 * 60 * 60 * 24 * 365是否符合您期望的结果,如果没有,请找到获得预期结果的方法。也许你甚至应该考虑到地球上,我们有所谓的闰年,你可以将你的问题标记为家庭作业。

答案 2 :(得分:2)

1000 * 60 * 60 * 24 * 365

是一个int,但它很长时间才能拥有它。使其中一个很长,如:

1000L * 60 * 60 * 24 * 365