左に追加する、右に追加する、左に削除する、右に削除するというオプション付きのDequeをjavaで作成する作業があります。デキューの前面を削除する問題(ダブルエンドキュー)
私は追加権限をコーディングしていますが、正常に削除する方法はありますが、左に追加して左の作業を削除する際に問題があります。
私はどこか大規模に間違っていると思います。私は配列を使用して両端キューを作成しようとしています
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)
:私はちょうどアドオンは、左の変数の周りに交換し、動作しませんでしたし、ちょうど次を思い付くだろうな計算を逆にしようとしています。以下は、右の追加と左のメソッドを追加するための私のコードです:
は(働いている)右
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);
}
を追加
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);
}
(動作しない)左を追加し、誰かが説明することができますなぜこのaddLeftメソッドが動作していないのですか?これをしばらく私が困惑させてしまったのは、大きな助けになるでしょう!前もって感謝します。