/************************************************************************* Reference solution for Spring 2013 COS 126 Programming Exam 2: Person Author: COS 126 Staff Netid: cos126 Precepts: lots of them Dependencies: Stack, Queue, StdOut Description: Models a person, a list of messages that they can read, and a list of their friends, so that when you post a message, all your friends can read it too. **************************************************************************/ public class Person { private String name; private Queue friends; // Stack or Queue, doesn't matter private Stack wall; // Stack, so newest is iterated first // Create a new Person with this name. public Person(String name) { this.name = name; this.friends = new Queue(); this.wall = new Stack(); } // Make these two people become friends with each other. // Throw an exception if you try to meet yourself. // We are allowed to assume we didn't meet this person yet. public void meet(Person otherPerson) { if (otherPerson == this) throw new RuntimeException("You can't meet yourself"); friends.enqueue(otherPerson); // remember this friend otherPerson.friends.enqueue(this); // reciprocate } // Are these two people friends? // Throw an exception if you ask about knowing yourself. public boolean knows(Person otherPerson) { if (otherPerson == this) throw new RuntimeException("You can't call knows() on yourself"); // Search through all my friends for (Person p : friends) { if (p == otherPerson) return true; } // If otherPerson was not found, I don't know them return false; } // Post a message to my list and the lists of all my friends public void post(String message) { wall.push(message); // add to my own list for (Person p : friends) p.wall.push(message); // and to each friend's } // Print a header, then all messages this Person can read, newest first public void listMessages() { // header StdOut.println("== The wall of " + name + " =="); // Iterate through all messages and print them for (String s : wall) StdOut.println(s); } }