Java队列合并,初学者

Java队列合并,初学者,java,list,queue,linked-list,Java,List,Queue,Linked List,我正在尝试编写一个方法,该方法将接收两个队列(预先排序的链表),并以升序返回合并后的队列对象。我粘贴了Queue类,merge方法向下1/2开始 我在调用merge时遇到了问题,这就是我试图从我的主方法调用它的方式,有人能帮助我使用new1和new2调用它吗。非常感谢大家 如果有人注意到任何不合适的地方,请告诉我。谢谢 ///////////////// //Testing with a call of merge method & 2 Queues///////////////////

我正在尝试编写一个方法,该方法将接收两个队列(预先排序的链表),并以升序返回合并后的队列对象。我粘贴了Queue类,merge方法向下1/2开始

我在调用merge时遇到了问题,这就是我试图从我的主方法调用它的方式,有人能帮助我使用new1和new2调用它吗。非常感谢大家

如果有人注意到任何不合适的地方,请告诉我。谢谢

///////////////// //Testing with a call of merge method & 2 Queues///////////////////

public class test {
public static void main (String args[]){


 Queue new1 = new Queue();
 new1.enqueu(1);
 new1.enqueu(3);
 new1.enqueu(5);

 Queue new2 = new Queue();
 new1.enqueu(2);
 new1.enqueu(4);
 new1.enqueu(6);

    merge(new1, new2);

 //How to call merge? Queue.merge(new1, new2)???
/////////////////Queue/Merge method below////////////////////////


public class Queue {
private Node first, last;
public Queue(){
first = null;
last = null;
}

public void enqueu(int n){
 Node newNode = new Node(n);
 if (first == null)
 {
  first = newNode;
  last = newNode;

 }
 else
 {
  last.setNext(newNode);
  last = newNode;
 }
 }



public int dequeue(){
int num = first.getNum();
first = first.getNext();
if(first == null)
last = null;
return num;
}

public Boolean isEmpty() { return first == null; }



////////////////////////Begin Queue merge/////////////////////////////////


Queue merge(Queue q1, Queue q2) {
 Queue result = new Queue();
 boolean q1empty = q1.isEmpty();
 boolean q2empty = q2.isEmpty();
 while (!(q1empty || q2empty)) { 
 if (q1.first.getNum() < q2.first.getNum()) {
 result.enqueu(q1.dequeue());
 q1empty = q1.isEmpty();
 } else {
 result.enqueu(q2.dequeue());
 q2empty = q2.isEmpty();
 }
 }
 if (!q1empty) {
 do {
 result.enqueu(q1.dequeue());
 } while (!q1.isEmpty());
 } else if (!q2empty) {
 do {
 result.enqueu(q2.dequeue());
 } while (!q2.isEmpty());
 }
 return result;
 }}
//使用merge-method&2队列调用进行测试///////////////////
公开课考试{
公共静态void main(字符串参数[]){
队列new1=新队列();
新的1.enqueu(1);
新的1.enqueu(3);
新的1.enqueu(5);
队列new2=新队列();
新的1.enqueu(2);
新的1.enqueu(4);
新的1.enqueu(6);
合并(new1,new2);
//如何调用merge?Queue.merge(new1,new2)???
/////////////////下面的队列/合并方法////////////////////////
公共类队列{
首先是私有节点,最后是私有节点;
公共队列(){
第一个=空;
last=null;
}
公共行政区(国际北){
Node newNode=新节点(n);
if(first==null)
{
第一个=新节点;
last=newNode;
}
其他的
{
last.setNext(newNode);
last=newNode;
}
}
公共整数出列(){
int num=first.getNum();
first=first.getNext();
if(first==null)
last=null;
返回num;
}
公共布尔isEmpty(){return first==null;}
////////////////////////开始队列合并/////////////////////////////////
队列合并(队列q1、队列q2){
队列结果=新队列();
布尔q1empty=q1.isEmpty();
布尔值q2empty=q2.isEmpty();
而(!(q1empty | q2empty)){
if(q1.first.getNum()
这里有一个bug:

Queue new1 = new Queue();
new1.enqueu(1);
new1.enqueu(3);
new1.enqueu(5);

Queue new2 = new Queue();
new1.enqueu(2);
new1.enqueu(4);
new1.enqueu(6);
您在
new1
中添加了六个元素,在
new2
中添加了零个元素

由于您的
merge
方法是
Queue
类的实例方法,因此需要在队列实例上调用它,例如

Queue q = new Queue();
Queue merged = q.merge(new1, new2);
但是,由于merge似乎没有副作用,并且不会改变队列实例的任何状态,因此您可能希望将此方法设置为静态,以便它属于队列类而不是队列实例。例如:

static Queue merge(Queue q1, Queue q2) {
     ...
}

//in main()...
Queue merged = Queue.merge(new1, new2);

这里有一个bug:

Queue new1 = new Queue();
new1.enqueu(1);
new1.enqueu(3);
new1.enqueu(5);

Queue new2 = new Queue();
new1.enqueu(2);
new1.enqueu(4);
new1.enqueu(6);
您在
new1
中添加了六个元素,在
new2
中添加了零个元素

由于您的
merge
方法是
Queue
类的实例方法,因此需要在队列实例上调用它,例如

Queue q = new Queue();
Queue merged = q.merge(new1, new2);
但是,由于merge似乎没有副作用,并且不会改变队列实例的任何状态,因此您可能希望将此方法设置为静态,以便它属于队列类而不是队列实例。例如:

static Queue merge(Queue q1, Queue q2) {
     ...
}

//in main()...
Queue merged = Queue.merge(new1, new2);

将两个排序迭代器合并为另一个迭代器的简单方法:

public static Iterator<Object> merge(final Iterator<Object> it1,
        final Iterator<Object> it2, final Comparator<Object> comp) {
    return new Iterator<Object>() {
        private Object o1 = it1.hasNext() ? it1.next() : null, o2 = it2
                .hasNext() ? it2.next() : null;
            @Override
        public boolean hasNext() {
            return o1 != null || o2 != null;
        }

        @Override
        public Object next() {
            if (o1 == null && o2 == null)
                throw new NoSuchElementException();
            Object ret;
            if (o1 == null) {
                ret = o2;
                o2 = it2.hasNext() ? it2.next() : null;
            } else if (o2 == null) {
                ret = o1;
                o1 = it1.hasNext() ? it1.next() : null;
            } else {
                if (comp.compare(o1, o2) <= 0) {
                    ret = o1;
                    o1 = it1.hasNext() ? it1.next() : null;
                } else {
                    ret = o2;
                    o2 = it2.hasNext() ? it2.next() : null;
                }
            }
            return ret;
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException("Not implemented");
        }
    };
}
公共静态迭代器合并(最终迭代器it1,
最终迭代器it2,最终比较器comp){
返回新的迭代器(){
私有对象o1=it1.hasNext()?it1.next():null,o2=it2
.hasNext()?it2.next():null;
@凌驾
公共布尔hasNext(){
返回o1!=null | | o2!=null;
}
@凌驾
公共对象下一个(){
如果(o1==null&&o2==null)
抛出新的NoTouchElementException();
对象ret;
如果(o1==null){
ret=o2;
o2=it2.hasNext()?it2.next():空;
}否则如果(o2==null){
ret=o1;
o1=it1.hasNext()?it1.next():null;
}否则{

if(comp.compare(o1,o2)将两个排序迭代器合并为另一个迭代器的简单方法:

public static Iterator<Object> merge(final Iterator<Object> it1,
        final Iterator<Object> it2, final Comparator<Object> comp) {
    return new Iterator<Object>() {
        private Object o1 = it1.hasNext() ? it1.next() : null, o2 = it2
                .hasNext() ? it2.next() : null;
            @Override
        public boolean hasNext() {
            return o1 != null || o2 != null;
        }

        @Override
        public Object next() {
            if (o1 == null && o2 == null)
                throw new NoSuchElementException();
            Object ret;
            if (o1 == null) {
                ret = o2;
                o2 = it2.hasNext() ? it2.next() : null;
            } else if (o2 == null) {
                ret = o1;
                o1 = it1.hasNext() ? it1.next() : null;
            } else {
                if (comp.compare(o1, o2) <= 0) {
                    ret = o1;
                    o1 = it1.hasNext() ? it1.next() : null;
                } else {
                    ret = o2;
                    o2 = it2.hasNext() ? it2.next() : null;
                }
            }
            return ret;
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException("Not implemented");
        }
    };
}
公共静态迭代器合并(最终迭代器it1,
最终迭代器it2,最终比较器comp){
返回新的迭代器(){
私有对象o1=it1.hasNext()?it1.next():null,o2=it2
.hasNext()?it2.next():null;
@凌驾
公共布尔hasNext(){
返回o1!=null | | o2!=null;
}
@凌驾
公共对象下一个(){
如果(o1==null&&o2==null)
抛出新的NoTouchElementException();
对象ret;
如果(o1==null){
ret=o2;
o2=it2.hasNext()?it2.next():空;
}否则如果(o2==null){
ret=o1;
o1=it1.hasNext()?it1.next():null;
}否则{
如果(成分比较(o1,o2)