我的任务是在java中创建一个Deque,使用选项添加左边,添加右边,删除左边并删除右边。移除出队前端的问题(双端队列)
我已经编写了添加权限,并成功地删除了正确的方法,但我有问题试图让左侧添加和删除左侧工作。
我觉得我已经大大地错了某个地方。我刚才想换轮变量左侧添加和倒车,没有工作,而且只会拿出以下的计算:
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 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);
}
添加右键(这是工作)
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);
}
请能有人解释对我来说为什么这个addLeft方法不起作用。这将是一个很大的帮助,因为我一直在这个难住!提前致谢。