1   /**
2    * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch
3    * Ein User mit einer Freundesliste
4    */
5   class User {
6   
7       private String name;                // Name
8   
9       private Friend friendList;          // erster Knoten der Freundesliste
10  
11      /**
12      * Konstruktor setzt den Namen
13      */
14      public User(String name) {
15          this.name = name;
16      }
17  
18      /**
19      * liefert den Namen
20      */
21      public String name() {
22          return name;
23      }
24  
25      /**
26      * liefert den Beginn (ersten Knoten) der Freundesliste
27      */
28      public Friend friends() {
29          return friendList;
30      }
31  
32      /**
33      * zeigt die Freunde an
34      */
35      public void showFriends() {
36          System.out.print("{ "+name()+": ");
37  
38          Friend friend = friendList;
39          while (friend != null) {        // Listenende erreicht ?
40              User u = friend.who();
41              System.out.print(u.name()+" ");
42  
43              // nächster Knoten in der Liste
44              friend = friend.next();
45          }
46          System.out.println("}");
47      }
48  
49      /**
50      * Test auf Freundschaft
51      */
52      public boolean isFriend(User user) {
53  
54          Friend friend = friendList;
55          while (friend != null) {
56  
57              // wenn "user" ein Freund ist
58              if (user == friend.who()) return true;
59  
60              // nächster Knoten in der Liste
61              friend = friend.next();
62          }
63          return false;
64      }
65  
66      /**
67      * trägt in die Freundesliste ein
68      */
69      public void addFriend(User user) {
70  
71          // wenn "user" noch nicht Freund ist
72          if (!isFriend(user)) { 
73  
74              // Erzeugen eines neuen Listenknotens, der 
75              // vorne in die Liste eingehängt wird
76              friendList = new Friend(user, friendList);
77  
78              // trage auch "mich" als Freund von "user" ein
79              user.addFriend(this);
80          }
81      }
82  
83      /**
84      * zeigt gemeinsame Freunde an
85      */
86      void showCommonFriends(User user) {
87          System.out.print("{ "+name()+" & "+user.name()+": ");
88  
89          Friend friend = friendList;
90          while (friend != null) {
91  
92              User f = friend.who();
93              // wenn "user" Freund einer "meiner" Freunde ist
94              if (f.isFriend(user))
95                  System.out.print(f.name()+" ");
96  
97              // nächster Knoten in der Liste
98              friend = friend.next();
99          }
100         System.out.println("}");
101     }
102 
103 }
104