当我尝试从ArrayQueue>变量类型出队到ArrayQueue并将其作为参数传递给另一个方法时,我遇到了一些问题。Java ArrayQueue入队和出队抛出arrayQueueException
所以基本上我有两个方法,一个是sort()而没有参数,另一个是merge(),它需要2个ArrayQueue参数。
我有一个全局变量称为队列:
private ArrayQueue<ArrayQueue<E>> Queue;
我的排序(),我出列从队列前两个项目,并通过他们合并()作为参数内:
public void sort() {
while (Queue.size() >= 2) {
ArrayQueue<E> first = Q.dequeue();
ArrayQueue<E> second = Q.dequeue();
System.out.print("1st" + firstElement);
System.out.print("2nd" + secondElement);
merge(first,second)
}
}
public E dequeue() throws ArrayQueueException {
if (isEmpty() == true)
throw new ArrayQueueException("Queue error");
if (front == rear) {
front = front - 1;
rear = rear - 1;
} else
front = front + 1;
size--;
return Q[front];
}
然后我的合并内:
private ArrayQueue<E> merge(ArrayQueue<E> q1, ArrayQueue<E> q2) throws ArrayQueueException {
System.out.println("q1 is " + q1.toString());
ArrayQueue<E> merged = new ArrayQueue<E>();
String e1 = (String) q1.dequeue();
System.out.println("e1 is " + e1);
String e2 = (String) q2.dequeue();
merged.enqueue(q2.dequeue());
if (q2.isEmpty()) {
// add remaining q1 elements
while (!q1.isEmpty()) {
merged.enqueue(q1.dequeue());
}
break;
}
// take another element from q2
e2 = (String) q2.dequeue();
}
而且我从控制台得到的输出为:
1st[the]2nd[ragged]q1 is [the]
e1 is null
Exception in thread "main" ArrayQueueException: Queue error
at ArrayQueue.dequeue(ArrayQueue.java:84)
at QueueSort.merge(QueueSort.java:41)
at QueueSort.sort(QueueSort.java:73)
at QueueSort.main(QueueSort.java:122)
QueueSort.java:41是这一行:merged.enqueue(q2.dequeue());我不知道为什么它不会出队。
另外,我不知道为什么e1变为空,因为我试图执行一个出队并将其转换为字符串。我在后面的部分需要这个字符串。 任何想法?提前致谢。
'ArrayQueue'不是一般的JDK实用程序类。它实际上来自'com.sun.jmx.remote.internal'包,因此没有记录,不应该被客户端代码使用。这里的正确类可能是['ArrayDeque'](http://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html)(或'LinkedList',无论你喜欢什么) –
@ Slanec这实际上是一项任务,我们必须遵循他们所说的话。你有什么想法如何根据上述标准来解决它?因为merge()的ArrayQueue参数只包含一个字符串,所以我一直在考虑是否有可能将它从参数中退出,并像上面的代码一样返回到另一个队列中?我在想是不是因为那部分导致了问题? – hyperfkcb
@Slanec你有什么想法吗? – hyperfkcb