我正在制作一个电话簿中条目的链接列表。然而,我正在努力找出一个完整的删除方法。我正在尝试检测我试图删除的条目不在列表中,并发出"未找到条目"消息。我正在使用链表的列表界面。这是迄今为止的删除方法。现在,我尝试在最后一个if语句中介绍"最后一个节点"的情况。但它不起作用。如果我没有使用列表接口,我想我可以使用getLast()方法并将其与我当前所在的条目进行比较,但我更喜欢这样做,并找出另一种解决方法。有什么想法吗?--编辑它不起作用的原因是,如果我删除了列表上的最后一个条目,它会打印出条目未找到的消息,即使该条目是最后一个节点,并且已成功删除
public void deleteEntry(String number) {
ListIterator<Entry> i = phoneBook.listIterator();
while(i.hasNext()){
Entry e = i.next();
if(e.getNumber().equals(number)){
i.remove();
break;
}
}
if(phoneBook.size() != 0 && (!(i.hasNext()))){
System.out.println("Entry not found");
}
}
您可以这样做:
public void deleteEntry(String number) {
int size = phoneBook.size();
for (ListIterator<Entry> i = phoneBook.listIterator(); i.hasNext(); ) {
Entry e = i.next();
if (e.getNumber().equals(number)) {
i.remove();
break;
}
}
if (phoneBook.size() == size) {
System.out.println("Entry not found");
}
}
用return;
替换break;
语句。
public void deleteEntry(String number) {
ListIterator<Entry> i = phoneBook.listIterator();
while(i.hasNext()){
Entry e = i.next();
if(e.getNumber().equals(number)){
i.remove();
return;
}
}
System.out.println("Entry not found");
}
但最好将返回类型更改为boolean
,并在找到数字后立即返回true
,否则在结束时返回false
public void deleteEntry(String number) {
ListIterator<Entry> i = phoneBook.listIterator();
boolean found = false;
while(i.hasNext()){
Entry e = i.next();
if(e.getNumber().equals(number)){
if(!found)
found = true;
i.remove();
break;
}
}
if(!found){
System.out.println("Entry not found");
}
}