【发布时间】:2011-01-14 20:04:41
【问题描述】:
我有一个允许您构建节点的家谱应用程序。我遇到了一个需要编辑成员出生日期的问题。出生日期只是一个字符串,格式为 dd-mm-yyyy。在检查出生日期是否有效时出现了我的问题(即任何父母都不能比孩子年轻)。因此,如果节点有父母和孩子,并且用户选择编辑它的出生日期,该函数必须不断检查是否添加了两个日期之间的年龄。我遇到的问题是使用我定义的方法进行这种持续检查。我希望有人了解这个问题并可以提供帮助。注意 checkDOb 也设置了 dob。我的名字不好。
代码如下:
private void dateCheck(FamilyMember node) {
String dob = enterDateOfBirth();
if (node.hasChildren()) {
node.setDob(dob);
checkDob(node, node.getOldestChild(), 0);
}
FamilyMember parent = null;
if (node.hasMother() && node.hasFather()) {
if (node.getMother().getAge() > node.getFather().getAge()) {
parent = node.getFather();
} else {
parent = node.getMother();
}
checkDob(parent, node, 1);
} else {
//single parent
if (node.hasMother()) {
parent = node.getMother();
checkDob(parent, node, 1);
}
if (node.hasFather()) {
parent = node.getFather();
checkDob(parent, node, 1);
}
}
}
private void checkDob(FamilyMember parent, FamilyMember child, int member) {
out.println(parent.getYear());
out.println(child.getYear());
while (parent.getYear() > child.getYear()) {
out.println("Invalid Date - The Oldest Child of " + parent.getFullName()
+ "(" + child.getFullName() + ")\n cannot older than his/her parents. Try Again.");
out.println();
if (member == 0) {
parent.setDob(enterDateOfBirth());
}
if (member == 1) {
child.setDob(enterDateOfBirth());
}
}
}
private String enterDateOfBirth() {
out.print("Enter Year Of Birth (0 - 2011): ");
String y = in.nextLine();
out.print("Enter Month Of Birth (1-12): ");
String m = in.nextLine();
if (m.trim().equals("")) {
m = "0";
}
if (m.length() == 1) {
m = "0" + m;
}
m += "-";
out.print("Enter Date of Birth (1-31): ");
String d = in.nextLine();
if (d.trim().equals("")) {
d = "0";
}
if (d.length() == 1) {
d = "0" + d;
}
d += "-";
String dob = d + m + y;
while (!DateValidator.isValid(dob)) {
out.println("Invalid date. Try again.");
dob = enterDateOfBirth();
}
return (dob);
}
提前致谢。
【问题讨论】:
-
真的需要递归吗?你为什么不只检查直系父母的日期?如果您正在验证所有编辑,那么直到根目录都是有效的。
-
同意。尽管您在家族树中并没有真正的根节点。
-
你调用
DateValidator.isValid它是如何与recursiveDateCheck连接的?你如何使用'int gen'变量? -
嗨,对不起,首先它不需要递归,它只需要确保输入的日期在最大的孩子和最小的父母的日期之间。我可以评估最大的孩子和最小的父母,但需要将其实现到我的 checkDob 函数中。我不确定如何在不弄乱很多其他代码的情况下做到这一点!日期验证器检查日期是否早于今天的日期,以及月份、日期和年份是否是有效输入。它实际上只是检查用户是否没有输入像 99-00-2100 这样的内容作为 dob
-
这段代码到处都是。为什么不从人的模型和他们的关系的模型开始。您还应该查看 DateFormat。我不太了解代码,但看起来大部分可以用 FamilyMember 上的新方法 getOldestParent() 替换
标签: java unit-testing logic