我是java新手,我正在努力使这段代码正常运行。如果我第一次输入的出生日期错误,程序将返回null,如果我从第一次输入正确的出生日期起,程序将返回正确的出生日期。我做错了什么?
public static Date convertDOB() //Date of Birth Method
{
System.out.println("Enter Date Of Birth: ");
String dob = in.nextLine();
SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
Date realdob = null;
try
{
realdob = formater.parse(dob);
}
catch(ParseException e)
{
System.out.println("In-correct format. Format should be dd/mm/yyyy");
convertDOB();
}
return realdob;
}
3条答案
按热度按时间unftdfkk1#
java.time文件
我强烈建议您在日期工作中使用java.time,这是一种现代的java日期和时间api。对于从用户处读取日期,我建议使用迭代方法,而不是递归方法:
互动示例:
循环条件
realdob == null
确保方法永远不会返回null
. 在格式模式字符串中,我只给出一个d
还有一个M
以便用户可以自由输入一位或两位数字。许多用户觉得这很方便。如果您坚持要求用户输入两位数字表示月份和月份,请使用patterndd/MM/uuuu
.如果您喜欢递归解决方案:
与代码相比的技巧是将递归调用返回的值赋给
realdob
所以它会被返回(也从这个调用中)。链接
oracle教程:date time解释如何使用java.time。
zbsbpyhn2#
在每次递归调用期间,您都要初始化date类型的新对象。因此,即使在方法的后续递归调用中,如果存在正确的dob,方法的第一个调用总是返回null,因为这是初始化的。相反,在catch块中返回从下一个调用中得到的dob-
bxgwgixi3#
当你第一次输入错误的出生日期时,你就会陷入困境。在那里,你执行
convertDOB()
,但您不返回它:第一个realdob
为空。一旦第二个convertdob()完成,它将继续
return realdob;
,从上面看,为空。有两种方法可以解决此问题:1.
您可以返回convertdob在第二次执行函数时返回的任何内容。
2.
你设置了第二个
convertDOB()
执行,然后返回它。