dimanche 10 mai 2015

ArrayQueue mit Exceptions und Vererbung

Hallo allerseits,
seit einiger Zeit bastle ich an einer Aufgabe herum. Ich dachte bereits, das alles funktioniert, aber nun habe ich den Code wahrscheinlich doch vermurkst, sprich ich finde den Fehler nicht.
Das füllen, leeren und Inhaltabfragen der Queue funktioniert einwandfrei.

Aber wenn die Queue voll ist (Arrayinitialgrösse überschritten), müsste in einer Subklasse ein zweites Array angelegt und die Inhalte hinein kopiert werden. Ich habe auch bereits probiert die Exception auszuklammern, ohne Erfolg.


Kann mir jemand weiterhelfen?


Java Code:

  1. public class ArrayQueue implements Queue {
  2. protected Object[] OA = new Object[2];
  3. protected int pos = 0; // nächste Einfügeposition
  4. public ArrayQueue(int size) {// Konstruktor bei dem man zusätzlich die Array-Grösse mitgibt
  5. super();
  6. OA = new Object[size];//Array wird mit dieser grösse erstellt
  7. }
  8. public void put(Object obj) {//Daten ins Array einlesen
  9. if (pos==OA.length) throw new QueueExeption("Überlauf");//Wenn das Array voll ist, Exeption auslösen (Fehlermeldung "Überlauf")
  10. OA[pos] = obj; // obj in OA aufnehmen
  11. pos++; // pos erhöhen
  12. }
  13. public Object get() {//Objekt aus der Queue anzeigen und herausnehmen.
  14. if (pos==0){
  15. throw new QueueExeption("Leer");
  16. }
  17. Object o = OA[0];
  18. pos--; //Position wieder um 1 reduzieren
  19. for (int i = 1; i < OA.length; i++) {
  20.  
  21. Object object = OA[i];
  22. OA[i-1]=object;
  23. }
  24. return o;
  25.  
  26. // Nachrücken der restlichen Elemente, Aktualisieren von pos
  27. }
  28. protected void showArraySize() {//Zeigt die Arraygrösse an
  29. System.out.println("Arraygrösse: " + OA.length);
  30. }
  31.  
  32.  
  33. public Object peek() {
  34. return OA[0]; // noch keine Ausnahmebehandlung
  35. }
  36.  
  37. protected Object[] getOA() {// Hier wird das Objekt OArry weitergegeben mit protected
  38. return OA;
  39. }
  40.  
  41. protected void setOA(Object [] OA) {
  42. this.OA = OA;
  43. }
  44.  
  45. public void clear() { // noch zu implementieren
  46. pos=0;
  47.  
  48. for (int i = 0; i < OA.length; i++) { //Alle Stellen im Array durchgehen.
  49. OA[i]= null; //Entsprechende Arrayposition auf 0 setzen
  50. }
  51. }
  52. public boolean isEmpty() {//Wahr/Falsch-Wert zurückliefern, ob Array leer ist oder nicht.
  53. return pos == 0;
  54. }
  55. }


Java Code:

  1.  
  2. public class DynArrayQueue extends ArrayQueue {
  3. public DynArrayQueue(int size) {
  4. super(size);
  5. }
  6. /*@Override
  7.  public void put(Object obj) {
  8.   // TODO Auto-generated method stub
  9.   super.put(obj);
  10.  }
  11. */
  12.  
  13. public void put(Object obj){//Werte in Array eingeben
  14. super.put(obj);
  15. System.out.println("Subklasse_TEST");
  16. if (pos == OA.length -1){
  17. //Wenn beim einfügen die Größe nicht ausreicht vergrößern
  18. Object [] newOArray = new Object[OA.length * 2]; // neue größe - hier doppelt so groß
  19. CopyArrayItemsToNewArray(super.getOA(), newOArray);
  20. super.setOA(newOArray);
  21. }
  22. OA[pos] = obj; // obj in OA aufnehmen
  23. int i = pos++; // pos erhöhen
  24.  
  25. }
  26.  
  27. private void CopyArrayItemsToNewArray(Object [] oldObjectArray, Object [] newObjectArray) {
  28. for (int i = 0; i < oldObjectArray.length; i++) {
  29. newObjectArray[i] = oldObjectArray[i];
  30. }
  31. }
  32. }
  33. /*
  34. protected void push(Object obj){//Werte in Array eingeben
  35.   if (pos == OArry.length -1){
  36. //Wenn beim einfügen die Größe nicht ausreicht vergrößern
  37.   Object [] newOArray = new Object[OArry.length * 2]; // neue größe - hier doppelt so groß
  38.   CopyArrayItemsToNewArray(super.getOArry(), newOArray);
  39.   super.setOArray(newOArray);
  40.   }
  41.   OArry[pos] = obj; // obj in OA aufnehmen
  42.   int i = pos++; // pos erhöhen
  43. }*/


Java Code:

  1.  
  2. public class queueTest {
  3. public static void main(String[] args) {
  4. ArrayQueue q = new ArrayQueue(3);
  5. q.put("1hallo");
  6. q.put("2velo");
  7. q.clear();
  8. q.put("3auto");
  9. q.put("4auto");
  10. q.put("5auto");
  11. q.put("6auto");
  12.  
  13. System.out.println(q.get());
  14. System.out.println(q.get());
  15. q.showArraySize();
  16.  
  17. }
  18. }


Java Code:

  1.  
  2. public class QueueExeption extends RuntimeException {
  3. public QueueExeption(String string) {
  4. super(string);
  5. }
  6. }



Java Code:

  1.  
  2.  
  3. public interface Queue {
  4. public void put(Object o);
  5.  
  6. public Object get();
  7.  
  8. public void clear();
  9. public boolean isEmpty();
  10. }


ArrayQueue mit Exceptions und Vererbung

0 commentaires:

Enregistrer un commentaire