<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">// #######################################################################
// ### Liste.java                                                      ###
// ### Liste zur Verwaltung von Datenobjekten                          ###
// ### Verantwortlich: Thomas Dreibholz, dreibh@exp-math.uni-essen.de  ###
// #######################################################################


package pm;


import java.io.*;
import java.util.*;

import Datenobjekt;


// ****** Liste **********************************************************
public class Liste
{
   private Vector daten   = new Vector();
   private int    aktuell = 0;


   // ###### Konstruktor #################################################   
   public Liste() { }

      
   // ###### Liste leeren ################################################
   public void Neu() {
      daten   = new Vector();
      aktuell = 0;
   }

   
   // ###### Datenobjekt anfügen #########################################
   public void Anfuegen(Datenobjekt x) {
      daten.addElement(x);
   }


   // ###### Datenobjekt "name" löschen ##################################
   public void Loeschen(String name) {
      for(int i = 0;i &lt; daten.size();i++) {
         if(name.equals(Element(i).Beschreibung())) {
            daten.removeElementAt(i);
            aktuell = 0;
            break;
         }
      }
   }   


   // ###### Datenobjekt "name" suchen ###################################
   public Datenobjekt Suchen(String name) throws NoSuchElementException {
      for(int i = 0;i &lt; daten.size();i++) {
         if(name.equals(Element(i).Beschreibung())) {
            return(Element(i));
         }
      }
      throw new NoSuchElementException(); 
   }   

   
   // ###### Ausgabe #####################################################
   public void Ausgabe() {
      for(int i = 0;i &lt; daten.size();i++) {
         Element(i).Ausgabe();
      }
   }


   // ###### Umwandlung in String ########################################
   public String toString() {
      String s = "";
      for(int i = 0;i &lt; daten.size();i++) {
         s = s + Element(i).toString() + "\n";
      }
      return(s);      
   }                                 

   
   // ###### Block aus Liste extrahieren #################################
   public Liste ExtrahiereBlock(int block) throws ArrayIndexOutOfBoundsException {
      // Vorhergehende Blöcke überspringen
      int zaehler = 0;
      for(int i = 0;i &lt; block;i++) {
         while(Element(zaehler).Inhalt() != null) {
            zaehler++;
         }
         zaehler++;         
      }

      // Block kopieren      
      Liste neu = new Liste();
      try {
         while(Element(zaehler).Inhalt() != null) {
            neu.Anfuegen(Element(zaehler));
            zaehler++;
         }
      } catch(ArrayIndexOutOfBoundsException e) { }   
      return(neu);
   }


   // ###### Vergleich zweier Blöcke #################################
   static public boolean VergleicheBloecke(Liste b1, Liste b2) {
      if(b1.daten.size() == b2.daten.size()) {
         Datenobjekt x = null, y = null;
         for(int i = 0;i &lt; b1.daten.size();i++) {
            try {
               x = (Datenobjekt)b1.daten.elementAt(i);
               y = b2.Suchen(x.Beschreibung());
            } catch(NoSuchElementException e) {
               return(false);
            }   
            if(!x.EingabeTyp().equals(y.EingabeTyp()))
               return(false);
            if(!x.Inhalt().equals(y.Inhalt()))
               return(false);
         }   
         return(true);
      }
      return(false);      
   }


   // ###### Vergleich mit anderer Liste #################################
   public boolean equals(Liste vergleich) {
      if(daten.size() == vergleich.daten.size()) {
         try {
            for(int block = 0;;block++) {
               if(!VergleicheBloecke(ExtrahiereBlock(block),vergleich.ExtrahiereBlock(block)))
                  return(false);
             }       
         } catch(ArrayIndexOutOfBoundsException e) {  }
         return(true);
      }
      return(false);      
   }
   
     
   // ###### Erstes Element zurückliefern ################################
   Datenobjekt ErstesElement() throws NoSuchElementException {
      aktuell = 0;
      return((Datenobjekt)daten.firstElement());
   }


   // ###### Nächstes Element zurückliefern ##############################
   Datenobjekt NaechstesElement() throws NoSuchElementException {
      aktuell++;
      return((Datenobjekt)daten.elementAt(aktuell));
   }

   
   // ###### Anzahl der Elemente in der Liste ############################
   public int Anzahl() {
      return(daten.size());
   }

   
   // ###### Datenobjekt an Position i zurückliefern ###########################
   public Datenobjekt Element(int i) throws ArrayIndexOutOfBoundsException {
      return((Datenobjekt)daten.elementAt(i));
   }
}
</pre></body></html>