【发布时间】:2020-02-18 15:34:36
【问题描述】:
我有一个家庭作业,我们必须为健身中心制作一个非常基本的控制台应用程序,它可以创建成员和员工。当我要求用户输入新成员的生日时,我的问题就出现了。它应该检查生日是否为 DD/MM/YY 格式,所以我检查给出的答案是否是 6 位数字,并且只有 6 位数字。它似乎有效,除非有人给出以 0 开头的出生日期,例如:090498。
System.out.println("Please enter the new members birthday, in the format of DD/MM/YY:");
this.birthdate = console1.nextInt();
while(String.valueOf(birthdate).length() != 6){
System.out.println("Please give a valid date of birth in the format of: DD/MM/YY");
this.birthdate = console1.nextInt();
}
它不给出错误消息,但仅在生日为 6 位且以 1 EG 开头时才完成循环。:190798。
我知道这可能很简单,但我大约一个月前才开始学习 CS :)
【问题讨论】:
-
是的,因为您正在接受一个 int,并且会自动删除初始 0。你应该接受一个字符串。
-
DD/MM/YY等日期格式不是单个数字,而是 3 个数字的组合,因此如果您想将日期输入为一个,则需要使用字符串。然后可以使用正则表达式进行检查,以仅允许每个部分的有效数字。相比之下,您的方法将允许我输入 999999 的日期,这将被认为是有效的,因为它是一个 6 位数字。 -
检查合理日期输入的正则表达式可以是
^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[0-2])[0-9]{2}$。这将允许 01-31 范围内的日期和 01-12 范围内的月份,但它会允许“无效”日期,如 2 月 30 日或 4 月 31 日,因此您要么需要更复杂的日期,要么 - 我会说更好 - 将输入正确解析为Date或至少 3 个整数,然后您可以将其提供给更彻底的检查。
标签: java while-loop int string-length value-of