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