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

时间:2018-03-15 20:15:01

标签: java doubly-linked-list find-occurrences

我的nbSandwichs(int type)方法有问题 它应该通过双重链表并计算相同类型的三明治出现的次数,一切都很好,除了打印0的最后一个三明治,这是我不明白的,我的检查方法是说它不存在但是当我创建一个get get方法时,它确实存在。我的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;
    }
}

1 个答案:

答案 0 :(得分:1)

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