我的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;
}
}
答案 0 :(得分:1)
您的循环计算节点的时间与current.next != null
一样长。当current
是列表中的最后一个节点时,current.next
将为null
,因此不会计算在内。