/***************************************************************/ /* Prof. Dr. Gregor Büchel */ /* Source: List1.java */ /* Stand : 31.03.2003 */ /* */ /* Testprogramm für Listenverarbeitung für */ /* a) Listenelemente, die einen einfachen Datentyp haben, */ /* b) Listenelemente, die einen Klassen-Datentyp haben. */ /* */ /***************************************************************/ import java.io.*; import java.util.*; class List1 { public static void main(String args[]) throws IOException {int m,ir,ak=0; List ls1, ls2; ls1=null; ls2=null; do {m=menue(); switch(m) {case 1: System.out.println("Eingabe einer Wort-Liste:"); ls1=liste_anlegen(); ak=ls1.size(); System.out.println("Anzahl Listen-Knoten: "+ak); break; case 2: System.out.println("Ausgabe der Wort-Liste"); ir=liste_anzeigen(ls1); System.out.println(ir+" angezeigte Knoten"); break; case 3: if (ls1==null) { System.out.println("Eine nicht-angelegte Liste kann nicht geloescht werden."); } else { System.out.println("Die zu loeschende Liste:"+ls1); ls1.clear(); System.out.println("Zustand ls1="+ls1+" (leere, aber angelegte Liste)"); } break; case 4: System.out.println("Eingabe einer Liste mit Tupel-Knoten"); ls2=tupelliste_anlegen(); ak=ls2.size(); System.out.println("Anzahl Listen-Knoten: "+ak); System.out.println("Listeninhalt:"+ls2); break; case 5: System.out.println("Ausgabe der Tupel-Liste"); ir=tupelliste_anzeigen(ls2); System.out.println(ir+" angezeigte Knoten"); break; case 6: System.out.println("Zugriff auf Elemente der Tupel-Liste"); ir=tupelliste_zugriff(ls2); System.out.println(ir+" ausgefuehrte Zugriffe"); break; case 7: System.out.println("Elementtest in der Tupel-Liste"); ir=tupelliste_eletest(ls2); System.out.println(ir+" ausgefuehrte Zugriffe"); break; case 8: System.out.println("Knoten einfuegen:"); ir=tupel_einfuegen(ls2); System.out.println(ir+" neue Knoten"); break; case 9: System.out.println("Listen verketten:"); ir=listen_verketten(ls2); System.out.println("Neue Listenlaenge:"+ir); break; case 0: System.out.println("ENDE!"); break; default: System.out.println("Unzulaessige Eingabe!"); } } while(m!=0); } public static int menue() {int ir; System.out.println("Listenverarbeitung:"); System.out.println("(1) Anlegen einer Liste, deren Elemente Strings sind"); System.out.println("(2) Anzeigen einer String-Liste"); System.out.println("(3) String-Liste löschen"); System.out.println("(4) Anlegen einer Liste mit komplexen Knoten"); System.out.println("(5) Anzeigen einer Liste mit komplexen Knoten"); System.out.println("(6) Zugriff auf einzelne Listenelemente (komplexe Knoten)"); System.out.println("(7) Elementtest (komplexe Knoten)"); System.out.println("(8) Einfuegen eines komplexen Knotens"); System.out.println("(9) Zwei Listen verketten"); System.out.println("(0) ENDE"); System.out.println("Bitte wählen Sie!"); ir=IO1.einint(); return ir; } static List liste_anlegen() {int iz=1,ik; String ewort; boolean rw; List ls; ewort=new String(); ls=new LinkedList(); do {System.out.println("Bitte das "+iz+". Wort eingeben:(Ende=#)"); ewort=IO1.einstring(); ik=ewort.compareTo("#"); if (ik==0) continue; rw=ls.add(ewort); iz=iz+1; } while(ik!=0); return ls; } static int liste_anzeigen(List lx1) {int iz=0; String sr; /* Zum sequentiellen Durchlesen einer Liste benötigt man einen */ /* Iterator */ Iterator it1; /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } /* Zuordnung des Iterators zur gegebenen Liste */ it1=lx1.iterator(); /* hasNext()-Methode des Iterators prüft, ob die Liste min- */ /* destens einen Knoten hat. Hat man mit dem Iterator auf ei- */ /* nen Knoten zugegriffen, wird geprüft, ob dieser einen Nach- */ /* folger hat. */ while(it1.hasNext()) { iz=iz+1; /* Zugriff auf den existierenden Knoten mit der next()- */ /* Methode des Iterators. Damit man den Knoten korrekt ver- */ /* arbeiten kann, muss man den Datentyp des Knotens kennen. */ /* Hier ist das der Datentyp String. */ sr=(String)it1.next(); System.out.println("-> "+sr); } return iz; } static List tupelliste_anlegen() {int iz=1,ik; String w1; int z1; Likno1 tu1; boolean rw; List ls; w1=new String(); ls=new LinkedList(); do {System.out.println("Bitte den "+iz+". Tupel eingeben:(Ende=#)"); w1=IO1.einstring(); ik=w1.compareTo("#"); if (ik==0) continue; /* Fuer jeden Knoten wird eine Instanz angelegt */ tu1=new Likno1(); tu1.w=w1; System.out.println("Eine Zahl für den "+iz+". Knoten eingeben:"); z1=IO1.einint(); tu1.z=z1; rw=ls.add(tu1); iz=iz+1; } while(ik!=0); return ls; } static int tupelliste_anzeigen(List lx1) {int iz=0; Likno1 tr; Iterator it1; /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } it1=lx1.iterator(); tr=new Likno1(); while(it1.hasNext()) { iz=iz+1; /* Datentyp aller Knoten ist Likno1 */ tr=(Likno1)it1.next(); System.out.println("-> "+tr.w+" ::: "+tr.z); } return iz; } static int tupelliste_zugriff(List lx1) {int iz=0, anz, w=1, k, ws=3; Likno1 tr,kr,ta; /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } kr=new Likno1(); anz=lx1.size(); do { iz=iz+1; System.out.println("Sie koennen auf das k. Listenelement zugreifen: 0<=k<"+anz+" (ENDE: k<0)"); k=IO1.einint(); if (k<0||k>=anz) { w=0; continue; } tr=(Likno1)lx1.get(k); System.out.println(k+". Knoten : "+tr.w+" ::: "+tr.z); System.out.println("(1) aktuellen Knoten loeschen."); System.out.println("(2) aktuellen Knoten ersetzen."); System.out.println("(3) keine Aktion."); ws=IO1.einint(); switch(ws) {case 1: ta=(Likno1)lx1.remove(k); System.out.println("->("+ta.w+","+ta.z+") geloescht."); break; case 2: System.out.println("Knoten-Wort eingeben:"); kr.w=IO1.einstring(); System.out.println("Knoten-Zahl eingeben:"); kr.z=IO1.einint(); ta=(Likno1)lx1.set(k,kr); System.out.println("->("+ta.w+","+ta.z+") ersetzt."); break; default: break; } } while (w==1); return iz; } static int tupelliste_eletest(List lx1) {int iz=0,w=1,k; boolean ra; Likno1 tre,tra; tre=new Likno1(); /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } do { iz=iz+1; System.out.println("Geben Sie das Testelement ein: (ENDE=#)"); tre.w=IO1.einstring(); if (tre.w.compareTo("#")==0) { w=0; continue; } System.out.println("Zahl des Testelements:"); tre.z=IO1.einint(); for (k=0; k("+tre.w+","+tre.z+") an Pos.: "+k); } } while (w==1); return iz; } static int tupel_einfuegen(List lx1) {int iz=0, anz, w=1, k; Likno1 kr; /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } kr=new Likno1(); anz=lx1.size(); do { iz=iz+1; System.out.println("Einfuegeposition k angeben: 0<=k<"+anz+" (ENDE: k<0)"); k=IO1.einint(); if (k<0||k>anz) { w=0; iz=iz-1; continue; } System.out.println("Knoten-Wort eingeben:"); kr.w=IO1.einstring(); System.out.println("Knoten-Zahl eingeben:"); kr.z=IO1.einint(); lx1.add(k,kr); System.out.println("->("+kr.w+","+kr.z+") eingefuegt."); } while (w==1); return iz; } static int listen_verketten(List lx1) {int iz=0, a2, k; List lxw; boolean rt; /* Null-Pointer-Exception vermeiden */ if (lx1==null) { iz=-1; return iz; } lxw=tupelliste_anlegen(); rt=lx1.addAll(lxw); System.out.println("Anhaengen: "+rt); iz=lx1.size(); return iz; } }