Ich habe die Aufgabe, eine Deque in Java zu erstellen, mit Optionen zum Hinzufügen von Links, Hinzufügen von Rechten, Entfernen von Links und Entfernen von Rechts.Problem beim Entfernen der Warteschlange (doppelte Warteschlange)
Ich habe das Hinzufügen rechts und entfernen Sie die richtigen Methoden erfolgreich, aber ich habe Probleme beim Versuch, add links und entfernen links arbeiten.
Ich denke, ich bin irgendwo massiv falsch gegangen. Ich habe gerade versucht, um die Variablen Swapping für Add links und die Berechnungen umgekehrt, die nicht funktioniert haben und würde nur mit dem folgenden kommen:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:421)
at java.lang.StringBuffer.append(StringBuffer.java:265)
at datastructuresass1.DendQueue.toString(DendQueue.java:107)
at datastructuresass1.main.main(main.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Ich versuche, die deque Verwendung von Arrays zu erstellen. Unten ist mein Code für das Recht hinzufügen und links Methoden hinzufügen:
hinzufügen Links (die nicht funktioniert)
public void addLeft(T o){
left = (left + 1) % arr.length;
arr[left] = o;
// if the array is full copy it to a larger one
if ((left + 1) % arr.length == right) {
T[] newarr = (T[]) new Object[arr.length * 2];
int i;
for (i = 0; i < arr.length; i++)
newarr[i] = arr[(right - i) % arr.length];
arr = newarr;
left = i - 1;
right = 0;
System.out.println("Array size increased to " +
arr.length);
}
hinzufügen Right (Welche funktioniert)
public void addRight(T o) {
right = (right + 1) % arr.length;
arr[right] = o;
// if the array is full copy it to a larger one
if ((right + 1) % arr.length == left) {
T[] newarr = (T[]) new Object[arr.length * 2];
int i;
for (i = 0; i < arr.length; i++)
newarr[i] = arr[(left + i) % arr.length];
arr = newarr;
left = 0;
right = i - 1;
System.out.println("Array size increased to " +
arr.length);
}
Bitte könnte jemand erklären, zu mir, warum diese addLeft-Methode nicht funktioniert. Es wäre eine große Hilfe, da ich schon eine ganze Weile darauf gestoßen bin! Danke im Voraus.