mercredi 6 mai 2015

Exception vs. Testklasse (Programm testen)

Hallo allerseits, ich habe folgendes Problem:

Bei einer Aufgabe wurde verlangt, sobald ein Array die Initialgrösse erreicht hat, soll es eine Exception "Überlauf" anzeigen. ->> Das hat funktioniert.

Gleichzeitig sollte das Array in einer Subklasse in ein Grösseres Array kopiert werden--> Das hat auch funktioniert.
Als ich dies in einem separaten Programm gemacht hatte, konnte ich in der Testklasse "queueTest" Werte ins Array schreiben und wenn es zu gross wurde, generierte es ein neues.

Jetzt das Problem: Ich möchte nun wieder Testen ob es in diesem Programm funktioniert, aber immer wenn ich die Arraygrösse überschreite, zeigt es logischerweise die Exception an.


Weiss jemand was ich machen kann, damit die Exception angezeigt wird, aber das Programm trotzdem nicht unterbricht?







Code:

public
class ArrayQueue implements Queue {

   
protected Object[] OA = new Object[2];

   
protectedintpos = 0; // nächste Einfügeposition
   

   


   
public ArrayQueue(intsize) {// Konstruktor bei dem man zusätzlich die Array-Grösse mitgibt
       
super();

       
OA = new Object[size];//Array wird mit dieser grösse erstellt
       

    }


   
publicvoid put(Object obj) {//Daten ins Array einlesen
       

       
if (pos==OA.length) thrownew QueueExeption("Überlauf");//Wenn das Array voll ist, Exeption auslösen (Fehlermeldung "Überlauf")

       
OA[pos] = obj; // obj in OA aufnehmen
       
pos++; // pos erhöhen
    }


   
public  Object get() {//Objekt aus der Queue anzeigen und herausnehmen.

       
if (pos==0){

           
thrownew QueueExeption("Leer");

        }

       

        Object
o = OA[0];

       
pos--; //Position wieder um 1 reduzieren
       
for (inti = 1; i < OA.length; i++) {

           

            Object
object = OA[i];

           
OA[i-1]=object;

           

        }

       
returno;

       

       

       

       
// Nachrücken der restlichen Elemente, Aktualisieren von pos
   

    }


     
protectedvoid showArraySize() {//Zeigt die Arraygrösse an

            System.
out.println("Arraygrösse: " + OA.length);

        }

   

   

   
public Object peek() {

       
returnOA[0]; // noch keine Ausnahmebehandlung
    }


   

   
protected Object[] getOA() {// Hier wird das Objekt OArry weitergegeben mit protected

       
returnOA;

    }

   

   
protectedvoid setOA(Object [] OA) {

       
this.OA = OA;

    }

   

   
publicvoid clear() { // noch zu implementieren
       
pos=0;

       

       
for (inti = 0; i < OA.length; i++) { //Alle Stellen im Array durchgehen.

           
OA[i]= null; //Entsprechende Arrayposition auf 0 setzen
           

        }


    }


   
publicboolean isEmpty() {//Wahr/Falsch-Wert zurückliefern, ob Array leer ist oder nicht.

       
returnpos == 0;

    }

}


Code:


public
class queueTest {


   
publicstaticvoid main(String[] args) {

        ArrayQueue
q = new ArrayQueue(2);


   
q.put("1hallo");

   
q.put("2velo");

   
q.clear();

   
q.put("3auto");

   
q.put("4auto");   

   
q.put("5auto");   


    System.
out.println(q.get());

    System.
out.println(q.get());

   
q.showArraySize();


 

    }


}


Code:


public
class DynArrayQueue extends ArrayQueue {


   
public DynArrayQueue(intsize) {

       
super(size);

       

    }


   
@Override

   
publicvoid put(Object obj) {

       
// TODO Auto-generated method stub

       
super.put(obj);

    }

   

   

   
protectedvoid push(Object obj){//Werte in Array eingeben
       
if (pos == OA.length -1){

 
//Wenn beim einfügen die Größe nicht ausreicht vergrößern
            Object []
newOArray = new Object[OA.length * 2];          // neue größe - hier doppelt so groß             

            CopyArrayItemsToNewArray(
super.getOA(), newOArray);

           
super.setOA(newOArray);

        }

       
OA[pos] = obj; // obj in OA aufnehmen
       
inti = pos++; // pos erhöhen
 

    }

   

   

   

   

   
privatevoid CopyArrayItemsToNewArray(Object [] oldObjectArray, Object [] newObjectArray) {

       
for (inti = 0; i < oldObjectArray.length; i++) {

           
newObjectArray[i] = oldObjectArray[i];

        }

    }

   

   

   

}



Code:


public
class QueueExeption extends RuntimeException {


   
public QueueExeption(String string) {

       
super(string);

    }

   


}


Code:

Exception in thread "main" QueueExeption: Überlauf
    at ArrayQueue.put(
ArrayQueue.java:15)
    at queueTest.main(
queueTest.java:12)



Exception vs. Testklasse (Programm testen)

0 commentaires:

Enregistrer un commentaire