//Autor: Philipp Muigg //MatrikelNr: 0125958 //e-mail: p.muigg@kabsi.at //Beispielname: Konvneck (konvexes Vieleck) //BeispielNr: 3254 import TLinie; import TKoo2d; //Diese Klasse verhält sich ähnlich wie eine linked list (man //kann beliebig viele Objekte hineinschreiben und wieder auslesen) //weiters ist es möglich den inhalt als array zurückzugeben //(viele andere methoden von linked listen sind nicht eingebaut) //WICHTIG: diese klasse fängt keine exceptions... dh es kann durchaus //zu Cast oder ArrayOutOfBond exceptions kommen public class TArrayAppendObj { //diese staticvariable gibt an um wieviel das array vergrößert werden soll, wenn es zu //klein für zusätzliche daten ist (muss immer >0 sein) public static int vergrIntervall=10; //in array werden die Daten gespeichert (vom typ Object damit verschiedene Objekte //eingeschrieben werden können private Object[] array; //aktObjZahl enthält die tatsächliche Anzahl von Objekten-1 die in array gespeichert sind private int aktObjZahl; //die folgenden methoden gehören zum interface der Klasse und sind daher in der Dokumentatnion //genauer erläutert. public int getObjZahl() { return aktObjZahl; } public Object[] getArray() { return array; } public Object getObject(int index) { return array[index]; } public void trimArray() { setArraySize(aktObjZahl); } //diese methode kopiert den inhalt von array in ein neues //Array mit der größe gr+1 und setzt array dann auf dieses neu //erzeugte objekt public void setArraySize(int gr) { Object[] arrayBuff=array; array=new Object[gr+1]; aktObjZahl=-1; //wenn die neue größe kleiner ist als die aktuelle können daten verloren gehen //es dürfen innerhalb des arrays keine leeren elemente liegen (null), da sonst //aktObjZahl einen falschen wert erhält for (int i=0; i<=Math.min(array.length-1,arrayBuff.length-1); i++) { array[i]=arrayBuff[i]; if (array[i]!=null) aktObjZahl++; else break; } } public void clear() { aktObjZahl=-1; for (int i=0;i<=array.length-1;i++) array[i]=null; } //methode zum hinzufügen von daten public boolean appendObject(Object obj) { if ((aktObjZahl+1<=array.length-1)&&(obj!=null)) { //wenn noch platz im array ist und obj nicht leer dann wird obj //an der aktuellen position in array geschrieben aktObjZahl++; array[aktObjZahl]=obj; return true; } else if (obj!=null) { //wenn nicht genug platz ist und obj nicht leer wird das array mit //setArraySize vergrößert und obj wiederum in array eingeschrieben setArraySize(array.length+vergrIntervall-1); aktObjZahl++; array[aktObjZahl]=obj; return true; } else { //wenn obj leer ist darf es nicht hinzugefügt werden return false; } } //konstruktor der ein vorbereitetes Arrayobjekt erhält public TArrayAppendObj(Object[] a) { aktObjZahl=-1; array=a; } //verschiedene getter methoden (genauere beschreibung in der //Dokumentation) //wenn diese klasse weiter verwendet werdensoll ist es sinnvoll //weitere für den eigenen gebrauch sinnvolle methoden dieser //art zu schreiben public String[] toTrimmedStringArray() { String[] arrayBuff=new String[aktObjZahl+1]; for (int i=0;i<=aktObjZahl;i++) arrayBuff[i]=(String)array[i]; return arrayBuff; } public String getString(int index) { return (String)getObject(index); } public TKoo2d[] toTrimmedTKoo2dArray() { TKoo2d[] arrayBuff=new TKoo2d[aktObjZahl+1]; for (int i=0;i<=aktObjZahl;i++) arrayBuff[i]=(TKoo2d)array[i]; return arrayBuff; } public TKoo2d getTKoo2d(int index) { return (TKoo2d)getObject(index); } public TLinie[] toTrimmedTLinieArray() { TLinie[] arrayBuff=new TLinie[aktObjZahl+1]; for (int i=0;i<=aktObjZahl;i++) arrayBuff[i]=(TLinie)array[i]; return arrayBuff; } public TLinie getTLinie(int index) { return (TLinie)getObject(index); } }