Advertisement
Guest User

Untitled

a guest
Mar 19th, 2014
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1. package linear;
  2.  
  3.  
  4. /**
  5. * <p>Materialien zu den zentralen
  6. * Abiturpruefungen im Fach Informatik ab 2012 in
  7. * Nordrhein-Westfalen.</p>
  8. * <p>Klasse List</p>
  9. * <p>Objekte der Klasse List verwalten beliebig viele,
  10. * linear angeordnete Objekte. Auf hoechstens ein Listenobjekt,
  11. * aktuelles Objekt genannt, kann jeweils zugegriffen werden.
  12. * Wenn eine Liste leer ist, vollstaendig durchlaufen wurde oder
  13. * das aktuelle Objekt am Ende der Liste geloescht wurde, gibt es
  14. * kein aktuelles Objekt. Das erste oder das letzte Objekt einer
  15. * Liste koennen durch einen Auftrag zum aktuellen Objekt gemacht werden.
  16. * Außerdem kann das dem aktuellen Objekt folgende Listenobjekt
  17. * zum neuen aktuellen Objekt werden. Das aktuelle Objekt kann gelesen,
  18. * veraendert oder geloescht werden. Ausserdem kann vor dem aktuellen
  19. * Objekt ein Listenobjekt eingefügt werden.
  20. </p>
  21. *
  22. * <p>NW-Arbeitsgruppe: Materialentwicklung zum Zentralabitur
  23. * im Fach Informatik</p>
  24. *
  25. * @version 2011-01-05
  26. */
  27.  
  28. public class List
  29. {
  30. public Node first;
  31. private Node last;
  32. private Node current;
  33.  
  34. /**
  35. * Eine leere Liste wird erzeugt.
  36. */
  37. public List() {
  38. first = null;
  39. last = null;
  40. current = null;
  41. }
  42.  
  43. /**
  44. * Die Anfrage liefert den Wert true, wenn die Liste
  45. * keine Objekte enthaelt, sonst liefert sie den Wert false.
  46. * @return true, wenn die Liste leer ist, sonst false
  47. */
  48. public boolean isEmpty() {
  49. return first == null;
  50. }
  51.  
  52. /**
  53. * Die Anfrage liefert den Wert true, wenn es ein
  54. * aktuelles Objekt gibt, sonst
  55. * liefert sie den Wert false.
  56. * @return true, falls Zugriff moeglich, sonst false
  57. */
  58. public boolean hasAccess() {
  59. return current != null;
  60. }
  61.  
  62. /**
  63. * Falls die Liste nicht leer ist, es ein aktuelles
  64. * Objekt gibt und dieses nicht das letzte Objekt der
  65. * Liste ist, wird das dem aktuellen Objekt in der Liste
  66. * folgende Objekt zum aktuellen Objekt, andernfalls gibt
  67. * es nach Ausführung des Auftrags kein aktuelles Objekt,
  68. * d.h. hasAccess() liefert den Wert false.
  69. */
  70. public void next() {
  71. if (current != null)
  72. {
  73. current = current.getNext();
  74. }
  75. }
  76.  
  77. /**
  78. * Falls die Liste nicht leer ist, wird das erste
  79. * Objekt der Liste aktuelles Objekt.
  80. * Ist die Liste leer, geschieht nichts.
  81. */
  82. public void toFirst() {
  83. current = first;
  84. }
  85.  
  86. /**
  87. * Falls die Liste nicht leer ist, wird das
  88. * letzte Objekt der Liste aktuelles Objekt.
  89. * Ist die Liste leer, geschieht nichts.
  90. */
  91. public void toLast() {
  92. current = last;
  93. }
  94.  
  95. /**
  96. * Falls es ein aktuelles Objekt gibt
  97. * (hasAccess() == true), wird das aktuelle Objekt
  98. * zurueckgegeben, andernfalls (hasAccess()== false)
  99. * gibt die Anfrage den Wert null zurueck.
  100. * @return Inhaltsobjekt
  101. */
  102. public Object getObject() {
  103. if (current != null)
  104. return current.getValue();
  105. else
  106. return null;
  107. }
  108.  
  109. /**
  110. * Falls es ein aktuelles Objekt gibt (hasAccess() == true)
  111. * und pObject ungleich null ist, wird das aktuelle Objekt
  112. * durch pObject ersetzt. Sonst bleibt die Liste unveraendert.
  113. * @param pObject Inhaltsobjekt
  114. */
  115. public void setObject(Object pObject) {
  116. if (pObject != null && (current != null))
  117. current.setValue(pObject);
  118. }
  119.  
  120. /**
  121. * Ein neues Objekt pObject wird am Ende der Liste eingefuegt.
  122. * Das aktuelle Objekt bleibt unveraendert. Wenn die Liste
  123. * leer ist, wird das Objekt pObject in die Liste eingefuegt
  124. * und es gibt weiterhin kein aktuelles Objekt
  125. * (hasAccess() == false). Falls pObject gleich null ist,
  126. * bleibt die Liste unveraendert.
  127. *@param pObject Inhaltsobject
  128. */
  129. public void append(Object pObject) {
  130. if(pObject == null){
  131. return;
  132. }
  133. Node newNode = new Node(pObject);
  134. if(first == null){
  135. first = newNode;
  136. last = newNode;
  137. return;
  138. }
  139. last.setNext(newNode);
  140. newNode.setPrevious(last);
  141. last = newNode;
  142. }
  143.  
  144. /**
  145. *Falls es ein aktuelles Objekt gibt (hasAccess() == true),
  146. *wird ein neues Objekt vor dem aktuellen Objekt in die
  147. *Liste eingefuegt. Das aktuelle Objekt bleibt unveraendert.
  148. *Wenn die Liste leer ist, wird pObject in die Liste eingefuegt
  149. *und es gibt weiterhin kein aktuelles Objekt
  150. *(hasAccess() == false). Falls es kein aktuelles Objekt gibt
  151. *(hasAccess() == false) und die Liste nicht leer ist oder
  152. *pObject gleich null ist, bleibt die Liste unveraendert.
  153. *@param pObject Inhaltsobjekt
  154. */
  155. public void insert(Object pObject) {
  156. if(pObject == null){
  157. return;
  158. }
  159. Node newNode = new Node(pObject);
  160. if(first == null){
  161. first = newNode;
  162. last = newNode;
  163. return;
  164. }
  165. if(current == null){
  166. return;
  167. }
  168. Node previous = current.getPrevious();
  169. if(previous != null)
  170. previous.setNext(newNode);
  171. else
  172. first = newNode;
  173. newNode.setPrevious(previous);
  174. newNode.setNext(current);
  175. current.setPrevious(newNode);
  176. }
  177.  
  178. /**
  179. * Die Liste pList wird an die Liste angehaengt. Anschliessend
  180. * wird pList eine leere Liste. Das aktuelle Objekt bleibt unveraendert.
  181. * Falls pList null oder eine leere Liste ist, bleibt die Liste
  182. * unveraendert.
  183. * @param pList Liste
  184. */
  185. public void concat(List pList) {
  186. if(pList == null || pList.first == null){
  187. return;
  188. }
  189. if(this.first == null){
  190. first = pList.first;
  191. last = pList.last;
  192. current = null;
  193. }
  194. else {
  195. this.last.setNext(pList.first);
  196. pList.first.setPrevious(this.last);
  197. this.last = pList.last;
  198. }
  199. pList.first = null;
  200. pList.last = null;
  201. pList.current = null;
  202. }
  203.  
  204. /**
  205. * Falls es ein aktuelles Objekt gibt (hasAccess() == true),
  206. * wird das aktuelle Objekt geloescht und das Objekt hinter
  207. * dem gelaeschten Objekt wird zum aktuellen Objekt. Wird das
  208. * Objekt, das am Ende der Liste steht, geloescht, gibt es kein
  209. * aktuelles Objekt mehr (hasAccess() == false). Wenn die Liste
  210. * leer ist oder es kein aktuelles Objekt gibt (hasAccess() == false),
  211. * bleibt die Liste unveraendert.
  212. */
  213. public void remove() {
  214. if(first != null && current != null){
  215. Node previous = current.getPrevious();
  216. Node next = current.getNext();
  217. if(current == first){
  218. first = next;
  219. }
  220. else{
  221. previous.setNext(next);
  222. }
  223. if(current == last){
  224. last = previous;
  225. }
  226. else{
  227. next.setPrevious(previous);
  228. }
  229. current = next;
  230. }
  231. }
  232.  
  233. /**
  234. * NUR ZU DARSTELLUNGSZWECKEN!!!
  235. * KEINE OFFIZIELLE METHODE DES ZENTRALABITURS!!!
  236. * @return
  237. */
  238. public Node getCurrentNode() {
  239. return this.current;
  240. }
  241.  
  242. /**
  243. * NUR ZU DARSTELLUNGSZWECKEN!!!
  244. * KEINE OFFIZIELLE METHODE DES ZENTRALABITURS!!!
  245. * @return
  246. */
  247. public Node getFirstNode(){
  248. return this.first;
  249. }
  250.  
  251. /**
  252. * NUR ZU DARSTELLUNGSZWECKEN!!!
  253. * KEINE OFFIZIELLE METHODE DES ZENTRALABITURS!!!
  254. * @return
  255. */
  256. public Node getTailNode(){
  257. return this.last;
  258. }
  259.  
  260.  
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement