Java 显示队列的元素

Java 显示队列的元素,java,queue,Java,Queue,我有一些问题需要在java中显示队列列表的元素,而不使用add方法显示out。我需要打印队列列表中的偶数 package ru.vsu.cs.course1; public class SimpleLinkedListQueue2<T> implements SimpleQueue<T> { private class ListNode<T> { public T value; public ListNode<

我有一些问题需要在java中显示队列列表的元素,而不使用add方法显示out。我需要打印队列列表中的偶数

package ru.vsu.cs.course1;

public class SimpleLinkedListQueue2<T> implements SimpleQueue<T> {

    private class ListNode<T> {
        public T value;
        public ListNode<T> next;

        public ListNode(T value, ListNode<T> next) {
            this.value = value;
            this.next = next;
        }
    }

    private ListNode<T> head = null;
    private ListNode<T> tail = null;

    private int count = 0;


    @Override
    public void add(T value) {
        ListNode<T> newNode = new ListNode<>(value, null);
        if (count > 0) {
            tail.next = newNode;
        } else {
            head = newNode;
        }
        tail = newNode;
        count++;
        System.out.println(value);
    }
    @Override
    public T remove() throws Exception {
        if (count == 0) {
            throw new Exception("Queue is empty");
        }
        T value = head.value;
        head = head.next;
        count--;
        if (count == 0) {
            tail = null;
        }
        return value;
    }

    @Override
    public T element() throws Exception {
        if (count == 0) {
            throw new Exception("Queue is empty");
        }
        return head.value;
    }


public class main {
  
    public static void main(String[] args) {
        SimpleLinkedListQueue2<Integer> queue2=new SimpleLinkedListQueue2<Integer>();
        queue2.add(67);
        queue2.add(54);
        queue2.add(75);
        queue2.add(100);
        System.out.println("--------------");


    }
}
driver code

}
包ru.vsu.cs.course1;
公共类SimpleLinedListQueue2实现SimpleQueue{
私有类ListNode{
公共价值观;
公共列表节点下一步;
公共ListNode(T值,ListNode下一个){
这个值=值;
this.next=next;
}
}
私有ListNode头=null;
私有listnodetail=null;
私有整数计数=0;
@凌驾
公共无效添加(T值){
ListNode newNode=新ListNode(值,null);
如果(计数>0){
tail.next=newNode;
}否则{
头=新节点;
}
tail=newNode;
计数++;
系统输出打印项次(值);
}
@凌驾
public T remove()引发异常{
如果(计数=0){
抛出新异常(“队列为空”);
}
T值=水头值;
head=head.next;
计数--;
如果(计数=0){
tail=null;
}
返回值;
}
@凌驾
公共T元素()引发异常{
如果(计数=0){
抛出新异常(“队列为空”);
}
返回head.value;
}
公共班机{
公共静态void main(字符串[]args){
SimpleLink ListQueue2 queue2=新的SimpleLink ListQueue2();
2.加入(67);
2.加入(54);
2.加入(75);
2.增加(100);
System.out.println(“--------------”;
}
}
驱动程序代码
}

首先,
ListNode
类应该是
static
,所以继续添加该关键字

接下来,添加对显示队列元素的支持的最佳方法是使类实现。这样,调用者可以迭代元素并决定如何处理它们,例如简单地显示它们,或者做一些更复杂的事情

类SimpleLinedListQueue2实现SimpleQueue,Iterable{
. . .
@凌驾
公共迭代器迭代器(){
返回新的迭代器(){
private ListNode next=head;
@凌驾
公共布尔hasNext(){
返回下一步!=null;
}
@凌驾
公共交通工具{
if(next==null)
抛出新的NoTouchElementException();
T值=next.value;
next=next.next;
返回值;
}
};
}
}
试验

SimpleLink ListQueue2 queue2=新的SimpleLink ListQueue2();
2.加入(67);
2.加入(54);
2.加入(75);
2.增加(100);
//打印偶数值

对于(int-value:queue2)/,Andreas的答案是首选和推荐的解决方案。但是,如果不允许您更新
SimpleLink列表队列2
,以下代码将标记偶数项。唯一的问题是在
add
remove
操作期间额外的
println
小心,此实现仅为欢笑而编写,绝对不能在野外使用

public static void printEven(SimpleLinkedListQueue2<Integer> queue) throws Exception {

    SimpleLinkedListQueue2<Integer> tempQ = new SimpleLinkedListQueue2<Integer>();
    while (true) {
        try {
            queue.element();
        } catch (Exception e) {
            break;
        }
        Integer tempInt = queue.remove();
        if (tempInt%2 == 0) {
            System.out.println("even: " + tempInt.toString());
        }
        tempQ.add(tempInt);
    }
    while (true) {
        try {
            tempQ.element();
        } catch (Exception e) {
            break;
        }
        queue.add(tempQ.remove());
    }
}
67
54
75
100
--------------
67
even: 54
54
75
even: 100
100
67
54
75
100