如何使用Java删除通讯簿程序中的条目?

时间:2011-02-18 16:13:13

标签: java

我在删除地址簿中的条目时遇到问题...我正在使用ARRAY保存所有条目。

如果array[i] = null,等于输入的用户名,我会尝试设置array[i]。但是在我删除一个条目然后再次尝试查看所有条目之后,没有任何显示..并且输出显示:

  

线程“main”中的异常java.lang.NullPointerException
          在AddressBook.viewAll(AddressBook.java:61)
          在AddressBook.main(AddressBook.java:35)
  Java结果:1

这是删除条目时的代码:

public void deleteEntry() {
        SName = JOptionPane.showInputDialog("Enter Name to delete: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(SName)) {
                //JOptionPane.showMessageDialog(null, "Found!");
                entry[i] = null;
            }
        }
    }

你能帮我弄清楚我的代码有什么问题吗?还是LOGICAL ERROR?

如果你有任何建议或更好的方法来删除一个很有帮助的条目..

请帮忙......

1 个答案:

答案 0 :(得分:3)

if (entry[i].getName().equals(SName)) {

如果一次通过你

entry[i] = null
那么你将如何getName()后记?

尝试在if语句中添加空检查

if (entry[i] != null && entry[i].getName().equals(SName)) {
编辑:本杰明提出了一个很好的观点。您应该为showinputdialog()的空结果做好准备。例如,有一个取消按钮吗?如果他们按下那个,我相信你会得到零。这是一些更好的代码:

public void deleteEntry() {
    /* get the input */
    SName = JOptionPane.showInputDialog("Enter Name to delete: ");
    /* if no input, nothing to delete */
    if(SName == null) return;
    /* find the name */
    for (int i = 0; i < counter; i++) {
        /* make sure we have an entry*/
                                /* we know SName is not null */
        if (entry[i] != null && SName.equals(entry[i].getName())) {
            /* null out the deleted entry */
            entry[i] = null;
            // break; /* If you know you have unique names, you can leave the for loop now */
        } /* end if */
    } /* end for i*/
}