【发布时间】:2013-10-19 05:46:39
【问题描述】:
这是我的代码:
public class RecipeBook {
private class Node {
private Recipe mData;
private Node mNext;
private Node mPrev;
public Node(Recipe data, Node next, Node prev) {
mData = data;
mNext = next;
mPrev = prev;
}
}
private Node mHead;
private Node mTail;
private int mCount;
public RecipeBook() {
}
public void add(Recipe itemToAdd) {
Node newNode = new Node(itemToAdd, null, null);
if (mHead == null)
mHead = mTail = newNode;
else {
mTail.mNext = newNode;
newNode.mPrev = mTail;
mTail = newNode;
}
mCount++;
}
public int getCount() {
return mCount;
}
public Recipe get(int index) {
Node n = mHead;
for (int i = 0; i < index; i++) {
if (n == null)
return null;
n = n.mNext;
}
return n != null ? n.mData : null;
}
public boolean remove(Recipe itemToRemove) {
Node n = mHead;
boolean check = false;
if (n == null) {
check = false;
return check;
}
while (n != null) {
if (n.mData == itemToRemove) {
if (n == mHead) {
mHead = mHead.mNext;
mHead.mPrev = null;
}
else if (n == mTail) {
mTail = mTail.mPrev;
mTail.mNext = null;
}
else {
Node prev = n.mPrev;
Node next = n.mNext;
prev.mNext = next;
next.mPrev = prev;
}
check = true;
mCount--;
return check;
}
else {
n = n.mNext;
}
}
return check;
}
public Recipe searchByName(String name) {
for (int i = 0; i < this.getCount(); i++) {
if (this.get(i).getName().equals(name))
return this.get(i);
}
return null;
}
public Recipe searchByIngredients(String target) {
for (int i = 0; i < this.getCount(); i++) {
if (this.get(i).hasIngredients(target) == true)
return this.get(i);
}
return null;
}
}
我的问题出在 remove 方法上,实际上我已经用调试器检查过了。 while 循环工作正常,程序在n.mData == itemToRemove 时执行 if 语句。无论项目在列表中的哪个位置,它都会删除它应该删除的内容。此外,mCount 变小了,检查变为真,但是一旦它返回它就不会返回任何东西。相反,它会返回循环,并继续执行直到 n 为空。如果 check 保持为真,这会很好,但是在它退出 if 语句而不返回任何内容后,它将 check 恢复为 false,然后使整个方法返回 false。我尝试删除退货并休息,这给了我相同的结果。我还尝试在运行调试器时不返回也不中断,这表明它保留在 if 语句中,就好像该语句是一个循环一样。
【问题讨论】:
-
1.不要太相信调试器。放入打印输出语句,看看会发生什么。 2. 使用 equals(),而不是 == 来比较对象。并确保由 Recipe 类实现。
-
我打印了报表,不管我对我的列表做了什么,它总是返回 false。
-
然后参见第 2 点。打印出与什么进行比较的内容
标签: java list methods linked-list