Добавление элементов в набор - PullRequest
3 голосов
/ 18 марта 2011

Я должен создать курс с некоторыми студентами и аспирантами, затем извлечь из курса всех аспирантов с «Ismael Bento» в качестве их супервизора, используя метод getPostgraduates (), и использовать класс Notifier, чтобы отправить им сообщение (печатьтекст и получатель).Однако ничего не печатается ... Я предполагаю, что с моим методом 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 students;

import java.util.*;

public class Course {

    private Set<Student> students;
    private String name;

    public Course (String name, Set<Student> students){
        this.name = name;
        this.students = students;
    }

    public Set<Postgraduate> getPostgraduates(String nameOfSupervisor){
        Set<Postgraduate> postgraduates = new HashSet<Postgraduate>();

    for(Postgraduate p : postgraduates) {  
        if (p.getSupervisor().equals(nameOfSupervisor)){
            postgraduates.add(p);
        }
    }
        return postgraduates;

    }

}

и класс уведомителя:

package students;
import java.util.Iterator;
import java.util.Set;

public class Notifier {
    Set<? extends Notifiable> notifiables;

    public Notifier (Set<? extends Notifiable> n) {
        notifiables = n;
    }

    public void doNotifyAll(String message) {

        Iterator<? extends Notifiable> i = notifiables.iterator();
        while(i.hasNext()){
            i.next().notify();
        }


    }
}

Ответы [ 3 ]

7 голосов
/ 18 марта 2011

Проблема действительно в getPostgraduates().Это объясняется тем, что вы когда-либо сравнивались только с объектом postgraduate, который инициализируется нулевыми значениями.Вы должны пройти через весь набор студентов и проверить аспирантуру с руководителем, которого вы ищете вместо этого.

2 голосов
/ 18 марта 2011

вы сравниваете объекты знаком == и используете это условие, чтобы решить, следует ли добавлять в набор или нет .. что всегда будет ложным, так как сравнивает ссылки, а не фактические объекты. .

if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor)){
                postgraduates.add(postgraduate);
}

если вы хотите сравнить объекты, то вы должны назвать equals и переопределить equals.
Кроме того, реализация HashSet использует равенства и хэш-код для определения равенства. Вы переопределяете равенства и хэш-код в Postgraduate?

1 голос
/ 18 марта 2011
if(postgraduate.getSupervisor() == new Academic(nameOfSupervisor))

Это никогда не может быть правдой.

Вы сравниваете объекты (для практических целей память обращается к ссылкам на объекты), а не к содержимому объектов.

Вы не перечислите код для ваших Postgraduate или Academic классов, так что оттуда вы в одиночестве в данный момент :)

РЕДАКТИРОВАТЬ: Я погуглил домашнее задание. Может показаться, что Postgraduate и Academic оба являются Person, у которых есть метод getName().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...