J'ai une application de l'arbre généalogique qui vous permet de construire des nœuds. Je suis bloqué sur un problème qui nécessite de modifier la date de naissance d'un membre. La date de naissance est juste une chaîne dans le format suivant jj-mm-aaaa. Mon problème survient lorsque je vérifie si la date de naissance est valide (c'est-à-dire que tout parent ne peut pas être plus jeune qu'un enfant). Donc, si le noeud a à la fois des parents et des enfants et que l'utilisateur choisit de modifier sa date de naissance, la fonction doit continuellement vérifier si un âge entre les deux dates a été ajouté. Le problème que j'ai est d'obtenir cette vérification continuelle en utilisant les méthodes que j'ai définies. J'espère que quelqu'un comprend la situation et peut aider. Remarque checkDOb définit également le dob aussi. son mauvais nom de ma part.Problème de logique - Java
est ici le code:
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);
}
Merci à l'avance.
il doit vraiment être récursif? Pourquoi ne vérifiez-vous pas seulement les dates du parent immédiat? Si vous validez toutes les modifications, alors jusqu'à la racine sera valide. – Mauricio
D'accord.Bien que vous n'ayez pas vraiment de nœud racine dans un arbre généalogique. –
Vous appelez 'DateValidator.isValid' comment il s'est connecté avec recursiveDateCheck? Comment utilisez-vous la variable 'int gen'? –