Java 在集合中添加元素

Java 在集合中添加元素,java,hashset,Java,Hashset,我必须与一些本科生和研究生一起创建一门课程,然后使用getPostgraduates()方法从课程中提取所有以“Ismael Bento”为导师的研究生,并使用课堂通知程序向他们发送消息(打印文本和收件人)。 但是,没有打印任何内容。。。我猜我的getPostgraduates()方法有问题 以下是主要方法: package students; import java.util.*; public class ProgrammingTest { public static void

我必须与一些本科生和研究生一起创建一门课程,然后使用getPostgraduates()方法从课程中提取所有以“Ismael Bento”为导师的研究生,并使用课堂通知程序向他们发送消息(打印文本和收件人)。 但是,没有打印任何内容。。。我猜我的getPostgraduates()方法有问题

以下是主要方法:

package students;

import java.util.*;

public class ProgrammingTest {

    public static void main (String[] args){
        Academic rr = new Academic("Ricardo Rodriguez");
        Academic ib = new Academic("Ismael Bento");
        Set<Student> students = new HashSet<Student>();

        Undergraduate ug1 = new Undergraduate("gg4", "Greg","gg4@", rr);
        Undergraduate ug2 = new Undergraduate("pr3", "Pete","pr3@", ib);
        Postgraduate pg1 = new Postgraduate("te2", "Ted", "te2@", rr);
        Postgraduate pg2 = new Postgraduate("yj34", "Yao", "yj34@", ib);
        Postgraduate pg3 = new Postgraduate("jj8", "Jack", "jj8@", ib);

        students.add(ug1);
        students.add(ug2);
        students.add(pg1);
        students.add(pg2);
        students.add(pg3);

        Course c1 = new Course("c1", students);
        Set<? extends Notifiable> n = c1.getPostgraduates("Ismael Bento");
        Notifier notifier = new Notifier(n);
        notifier.doNotifyAll("You have been notified!");

    }

}
package学生;
导入java.util.*;
公共类编程测试{
公共静态void main(字符串[]args){
学术rr=新学术(“里卡多·罗德里格斯”);
学院ib=新学院(“伊斯梅尔本托”);
Set students=newhashset();
本科ug1=新本科(“gg4”、“Greg”、“gg4@”,rr);
本科ug2=新本科(“pr3”、“Pete”、“pr3@”、ib);
研究生pg1=新研究生(“te2”,“Ted”,“te2@”,rr);
研究生pg2=新研究生(“yj34”,“姚”,“yj34@”,ib);
研究生pg3=新研究生(“jj8”,“杰克”,“jj8@”,ib);
学生。添加(ug1);
学生。添加(ug2);
学生。添加(第1页);
学生。添加(第2页);
学生。添加(第3页);
课程c1=新课程(“c1”,学生);
设置
这永远不可能是真的

您正在比较对象(出于所有实际目的,对象引用指向的内存地址),而不是对象的内容

if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor)){
                postgraduates.add(postgraduate);
}
您没有列出您的
研究生课程
学术课程
的代码,因此您现在只能靠自己:)


编辑:我在谷歌上搜索了家庭作业。它会显示
研究生
学术
都是
,都有
getName()
method.

您正在通过==符号比较对象,并使用此条件决定是否在集合中添加..当它比较引用而不是实际对象时,它将始终为false..如果要比较对象,请重写等于

if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor)){
                postgraduates.add(postgraduate);
}
如果要比较对象,则应调用equals并覆盖equals。

此外,HashSet实现依赖于equals和hashcode来确定相等性。您在研究生中重写了equals和hashcode吗?

问题确实出在
getpostdudies()中
。这是因为您只能与对象
进行比较,该对象使用空值初始化。您应该遍历整个学生组,并与您正在寻找的导师一起检查研究生。

对象比较不应使用
=
,而应使用
.equals(对象o)
。一个好的开始方法是在代码中添加一些调试打印语句。我会帮助做家庭作业,但如果不是,那又是什么呢?PS:是的,这完全是家庭作业。不是。这是我去年的一篇论文,我正在做修订。我不必交,也不会因此得到分数。谢谢,我知道问题是空值。你介意给我一个关于如何遍历整个学生集的提示吗?当然可以。使用“for each”结构:
for(ElementType-element:YourSet){/*在这里使用'element*/}
if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor))
if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor)){
                postgraduates.add(postgraduate);
}