我在for循环中从数组访问字段时遇到问题。我确定我只是弄乱了语法:

public class Person {

String  name;
Person  mother;
Person  father;
ArrayList<Person> children;

public boolean isMotherOf(Person pers1) {
    //First check if Persons mother equals pers1
    if (mother.name == pers1.name) {
        //Second checks if pers1s children contains Person
        for (int i = 0; i < pers1.children.size(); i++) {
            if (pers1.children.name.get(i) == name) {
// ERROR ON THE LINE ABOVE: "name cannot be resolved or it not a field"
                return true;
            }
        } // END second check
    } else { return false; }


    } // END method isMotherOf
}


编辑:我的代码包含逻辑错误(与错误的人相比)。此安全检查有效吗?如果检查pers1的母亲是否有名字,如果pers1不存在,它将产生错误?

public class Person {

String  name;
Person  mother;
Person  father;
ArrayList<Person> children;

// Checks if THIS person is the mother of pers1
public boolean isMotherOf(Person pers1) {
    // Safety check: Both persons exists and Person has children and pers1 has mother
    if (name == null || children == null || pers1 == null
        || pers1.mother.name == null) {
        return false;
    } // END safety check
    // First check if Persons name equals pers1's mother
    else if (name.equals(pers1.mother.name)) {
        // Second check if Persons children contains pers1
        for (int i = 0; i < children.size(); i++) {
            if (children.get(i).name.equals(pers1.name)) {
                return true;
            }
        } // END second check
    } // END first check
    return false;
} // END method isMotherOf
} // END class Person

最佳答案

您交换了两件事,pers1.children.name.get(i)应该是pers1.children.get(i).name

既然我们在这里,您正在将字符串与==进行比较,此比较对象的引用,请改用equals(..)。签出here

08-05 12:37