如何合并两个泛型队列?调用mergeQueue方法报未定义错误如何解决
问题原因
该报错与泛型使用无关,是方法调用逻辑错误:
mergeQueue是定义在QueueDemo类中的静态方法,不属于ArrayUnbndQueue类- 你通过
ArrayUnbndQueue类的实例q3调用该方法,自然会提示方法未定义
修复方案
1. 修正方法调用方式
静态方法需要通过定义它的类名来调用,而非其他类的实例调用,同时你需要接收方法返回的合并后队列。
把报错的代码行:
q3.mergeQueue(q1, q2);
替换为:
ArrayUnbndQueue<Integer> mergedQ = QueueDemo.mergeQueue(q1, q2);
如果不需要保留原来的空q3,也可以直接赋值给q3:
q3 = QueueDemo.mergeQueue(q1, q2);
2. 可选优化
如果你确实希望通过ArrayUnbndQueue的实例调用该方法,可以把mergeQueue方法移到ArrayUnbndQueue类中定义即可。当前场景下直接通过类名调用静态方法是最合理的,因为合并两个队列的逻辑不需要依赖调用方实例的状态。
修复后完整代码示例
public class QueueDemo<T> { public static <T> ArrayUnbndQueue<T> mergeQueue(ArrayBndQueue<T> q1, ArrayBndQueue<T> q2) { ArrayUnbndQueue<T> temp = new ArrayUnbndQueue<T>(); while (!q1.isEmpty()) { T x = q1.dequeue(); temp.enqueue(x); } while (!q2.isEmpty()) { temp.enqueue(q2.dequeue()); } return temp; } public static void main(String[] args) { ArrayBndQueue<Integer> q1 = new ArrayBndQueue<Integer>(); ArrayBndQueue<Integer> q2 = new ArrayBndQueue<Integer>(); q1.enqueue(1); q1.enqueue(2); q2.enqueue(5); q2.enqueue(6); // 修正后的调用方式 ArrayUnbndQueue<Integer> q3 = QueueDemo.mergeQueue(q1, q2); } }
内容的提问来源于stack exchange,提问作者Hannon qaoud
相关产品推荐
相关产品推荐

