Java 调试时遇到问题-空集

Java 调试时遇到问题-空集,java,set,Java,Set,我最近在一次采访中被问到这个问题,给了我一个课程和一个测试课程,我必须运行这个课程来检查测试用例是否满意。我必须编写addParent()、getParent()、addChild()、getChild()、setSpouse()、getparty、hasSpouse()和isRelated()方法。我有一个小时的时间,这就是我能想到的。我已经试着调试了3天,但我只有在添加了父母和孩子之后才能得到空集 下面是我的代码: package kashyap; import java.u

我最近在一次采访中被问到这个问题,给了我一个课程和一个测试课程,我必须运行这个课程来检查测试用例是否满意。我必须编写addParent()、getParent()、addChild()、getChild()、setSpouse()、getparty、hasSpouse()和isRelated()方法。我有一个小时的时间,这就是我能想到的。我已经试着调试了3天,但我只有在添加了父母和孩子之后才能得到空集

下面是我的代码:

    package kashyap;
    import java.util.Set;
    import java.util.HashSet;

    public class MyPerson implements Person {
//declarations
    private String name;
    private long ssn;
    private char gender;
    //private Person parent;
    private Set<Person> parents = new HashSet<Person>();
    private Set<Person> children = new HashSet<Person>();
    private Person spouse = null;
//methods   
    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public long getSSN() {
        return ssn;
    }


    public void setSSN(long ssn) {
        this.ssn = ssn;
    }


    public char getGender() {
        return gender;
    }


    public void setGender(char gender) {
        this.gender = gender;
    }

    public MyPerson(String name, long ssn, char gender) {

        this.name = name;
        this.ssn = ssn;
        this.gender = gender;

    }


    public void addParent(Person parent) {
        // TODO Auto-generated method stub
        this.parents.add(parent);
    }

    public Set<Person> getParents() {
        // TODO Auto-generated method stub
        if(parents.isEmpty())
        {
            return null;
        }
        else
        {
            return parents;
        }
    }

    public void addChild(Person child) {
        // TODO Auto-generated method stub
        this.children.add(child);
    }

    public Set<Person> getChildren() {
        // TODO Auto-generated method stub
        if(children.isEmpty())
        {
            return null;
        }
        else
        {
            return children;
        }
    }

    public void setSpouse(Person spouse) {
        // TODO Auto-generated method stub
        this.spouse = spouse;
    }

    public Person getSpouse() {
        // TODO Auto-generated method stub
        if(spouse != null)
        {
            return spouse;
        }
        else
        {
            return null;
        }
    }

    public boolean hasSpouse() {
        // TODO Auto-generated method stub
        if(spouse != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public boolean isRelated(Person person) {
        // TODO Auto-generated method stub

        boolean related = false;

        if (parents.contains(person) || children.contains(person) || person == spouse)
        {
            return true;
        }

        Set<Person> set_p =  person.getParents();
        Set<Person> set_c =  person.getChildren();
        Person s = person.getSpouse();

        Set<Person> relatives = new HashSet<Person>();

        if(set_p != null){
            for(Person p : set_p)
            {
                relatives.add(p);
            }
        } 
        if(set_c != null){
            for(Person c : set_c)
            {
                relatives.add(c);       
            }
        } 

            relatives.add(s);


        for( Person x : relatives){
            related = isRelated(x);
            if(related == true)
                return true;
        }
        return false;
    }
}
还有另一个接口实现了所有这些:

package kashyap;

import java.util.Set;

public interface Person {

        static final char MALE = 'M';
        static final char FEMALE = 'F';

        // name
        String getName();
        void setName(String name);

        //ssn
        long getSSN();
        void setSSN(long ssn);

        //gender
        char getGender();
        void setGender(char gender);

        // relationships
        void addParent(Person parent);
        Set<Person> getParents();

        void addChild(Person child);
        Set<Person> getChildren();

        void setSpouse(Person spouse);
        Person getSpouse();

        // returns true if the person is married
        boolean hasSpouse();        
        // returns true if the person is related, false otherwise
        boolean isRelated(Person person);
}
kashyap包;
导入java.util.Set;
公共接口人员{
静态最终字符男性='M';
静态最终字符女性='F';
//名字
字符串getName();
void setName(字符串名);
//ssn
长getSSN();
无效设置SN(长ssn);
//性别
char getGender();
无效设置性别(字符性别);
//关系
无效的父母(个人父母);
设置getParents();
无效子女(人子女);
设置getChildren();
无效(个人配偶);
人(配偶);
//如果此人已婚,则返回true
布尔hasSpouse();
//如果此人有亲属关系,则返回true,否则返回false
布尔值相关(人);
}
有人能告诉我为什么所有的电视机都是空的吗?我只需要填写addParent()、getParent()、addChild()、getChild()、setSpouse()、getdomen、hasSpouse()和isRelated()方法,所以我假设其余的代码都可以


编辑:我被要求在这里使用集合,不是一个选择。

根据我的说法,你的
集合
不是空的。我可以找出测试用例失败的一个原因,因为您没有在
MyPerson
类中重写
equals()
hashcode()
(对于
HashSet


例如,在方法
isRelated(Person-Person)
中,您正在检查
parents.contains(Person)
,essentials会检查
Person
parents
中的所有元素是否相等。。你这么说是因为测试用例失败了吗?我不太懂java,但在
addParent
中你会
this.parents.add(parent)
但是在
getParents
中,您可以
返回父对象
,不应该是
返回这个.parents?@towr这不重要,好的。对我来说似乎不一致:)sanbhat:是的,它们是空的,我试图在addParent和addChild之后显示集合的大小和内容,两者都返回1和null,是的,测试用例失败。towr:我正在这样做。parents.add(parent),因为我希望将父对象添加为调用函数的对象的父对象,因为这两个对象都是Person的对象,我不想让它混淆,但在没有“this”的情况下也应该是一样的
package kashyap;

import java.util.Set;

public interface Person {

        static final char MALE = 'M';
        static final char FEMALE = 'F';

        // name
        String getName();
        void setName(String name);

        //ssn
        long getSSN();
        void setSSN(long ssn);

        //gender
        char getGender();
        void setGender(char gender);

        // relationships
        void addParent(Person parent);
        Set<Person> getParents();

        void addChild(Person child);
        Set<Person> getChildren();

        void setSpouse(Person spouse);
        Person getSpouse();

        // returns true if the person is married
        boolean hasSpouse();        
        // returns true if the person is related, false otherwise
        boolean isRelated(Person person);
}