计算其中有多少 "element" 出现在双向链表中

Counting how many of that "element" appear in a doubly linked list

我的 nbSandwichs(int type) 方法有问题 它应该通过双向链表并计算相同类型的三明治出现的次数,一切都很好,除了最后一个打印 0 的三明治,这是我不明白的,我的检查方法是这样说的它不存在,但是当我创建一个 get last 方法时,它确实存在。我的 nbSandwichs 方法缺少什么条件?我的 while 循环实际上没有到达最后一个节点吗?

谢谢

main class : 
    Sandwich s1 = new Sandwich(1);
        Sandwich s1 = new Sandwich(1);
        Sandwich s2 = new Sandwich(15);
        Sandwich s3 = new Sandwich(15);
        Sandwich s4 = new Sandwich(4);
        Sandwich s5 = new Sandwich(15);

        APreparer a1 = new APreparer();
        a1.addfirst(s1); 
        a1.addfirst(s2);
        a1.addfirst(s3);
        a1.addfirst(s4);
        a1.addfirst(s5);

        System.out.println(a1.nbSandwichs(15)); // PRINTS : 3 OK 
        System.out.println(a1.nbSandwichs(1)); // PRINTS : 0 NOT OK 


    public class Sandwich {

        private int type;

        public Sandwich(int type) {
            this.type = type;
            commandes[type]++;
        }

    public class APreparer {

        private UneCommande first;
        private UneCommande last;

        public void addfirst(Sandwich sandwich) {
            UneCommande nouvelle = new UneCommande(sandwich);
            if (first == null) {
                first = nouvelle;
                last = nouvelle;

            } else {
                first = first.addFirst(sandwich);
            }
        }

    int nbSandwichs(int type) {
        if (first == null) {
            return 0;
        } else {
            return first.nbSandwichs(type);
        }
    }

    }


    public class UneCommande {

        private Sandwich sandwich;
        private UneCommande next;
        private UneCommande previous;

        public UneCommande(Sandwich sandwich) {
            this.sandwich = sandwich;
        }

        public UneCommande addFirst(Sandwich sandwich) {
            UneCommande current = this;
            UneCommande newSand = new UneCommande(sandwich);
            newSand.next = current;
            this.previous = newSand;

            return newSand;
        }
int nbSandwichs(int type) {
        int counter = 0;
        UneCommande current = this;

        if (!(check(type))) {
            return 0;
        } else {
            while (current.next != null) {
                if (current.sandwich.getType() == type) {
                    counter++;
                }
                current = current.next;
            }
        }
        return counter;
    }

    boolean check(int type) {
        UneCommande current = this;
        while (current != null) {
            if (current.sandwich.getType() == type) {
                System.out.println("EXIST");
                return true;
            }
            current = current.next;
        }

        return false;
    }
}

您的循环计算节点的长度为 current.next != null。当 current 是列表中的最后一个节点时,current.next 将是 null,因此不计算在内。