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

如何使用Java删除通讯簿程序中的条目?,java,Java,我在删除通讯簿中的条目时遇到逻辑问题。。。我正在使用数组保存所有条目 如果array[I]等于输入的用户名,我将尝试使array[I]=null。但当我删除一个条目,然后再次尝试查看所有条目后,什么也看不到。。输出显示: 线程“main”java.lang.NullPointerException中出现异常 在AddressBook.viewAll(AddressBook.java:61) 在AddressBook.main(AddressBook.java:35) Java结果:1 这是我删除

我在删除通讯簿中的条目时遇到逻辑问题。。。我正在使用数组保存所有条目

如果
array[I]
等于输入的用户名,我将尝试使
array[I]=null。但当我删除一个条目,然后再次尝试查看所有条目后,什么也看不到。。输出显示:

线程“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;
            }
        }
    }
public void deleteEntry(){
SName=JOptionPane.showInputDialog(“输入要删除的名称:”);
对于(int i=0;i
你能帮我找出我的代码出了什么问题吗。。。还是逻辑错误

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

请帮忙

if (entry[i].getName().equals(SName)) {
如果你一次通过

entry[i] = null
那么您将如何
getName()
afterwords

尝试向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*/
}
public void deleteEntry(){
/*获取输入*/
SName=JOptionPane.showInputDialog(“输入要删除的名称:”);
/*如果没有输入,则没有要删除的内容*/
if(SName==null)返回;
/*找到名字*/
对于(int i=0;i
根据条目[i]的类别,getName()也可以返回null。我建议在引用之前对两者进行空检查。