在Java中搜索LinkedList

在Java中搜索LinkedList,java,linked-list,Java,Linked List,我正在使用JavaS2SE制作一个简单的原型项目。目标是创建一个文本文件,逐行读取,填充一个链接列表,然后要求用户输入名字和第二个名字 文本文件的格式为: firstnamesecondname移动家庭手机2办公室 联系人1联系人2手机家庭手机2办公室 我在文本文件中连接第一个名称和第二个名称 然后,我要求用户输入第一个和第二个名称,并使用这两个字符串的连接来搜索填充的链接列表。在包含具有这些第一个名称和第二个名称的字符串的节点出现时,拆分该节点并显示该节点的结果 我的代码是: try {

我正在使用JavaS2SE制作一个简单的原型项目。目标是创建一个文本文件,逐行读取,填充一个链接列表,然后要求用户输入名字和第二个名字

文本文件的格式为:

firstnamesecondname移动家庭手机2办公室

联系人1联系人2手机家庭手机2办公室

我在文本文件中连接第一个名称和第二个名称

然后,我要求用户输入第一个和第二个名称,并使用这两个字符串的连接来搜索填充的链接列表。在包含具有这些第一个名称和第二个名称的字符串的节点出现时,拆分该节点并显示该节点的结果

我的代码是:

try {
    String fullname;
    String mobile;
    String home;
    String mobile2;
    String office;

    Node current=first;

    while(current.data == null ? key !=null : !current.data.equals(key)) {
        String splitter[]=current.next.data.split(" ");

        //fullname=splitter[9];
        mobile=splitter[1];
        home=splitter[2];
        mobile2=splitter[3];
        office=splitter[4];

        if(current.next.data.split(" ")==null?key==null:){

            mobilefield.setText(mobile);
            homefield.setText(home);
            mobilefield2.setText(mobile2);
            officefield.setText(office);
        } else {
            throw new FileNotFoundException("SORRY RECORD NOT LISTED IN DATABASE");
        }
            break;
    }
} catch(Exception e) {
        JOptionPane.showMessageDialog(this,e.getMessage()
        +"\nPLEASE TRY AGAIN !","Search Error", JOptionPane.ERROR_MESSAGE);
}

问题是一切正常,但列表中第一个和第n-1个节点的搜索出错,但在此搜索中未找到最后一个节点。

快速浏览,您试图引用一个可能为空的
下一个
节点

current.next.data
可以是
null
,如果是这种情况,那么您将得到一个NPE

你的循环应该关注它正在处理的第I个部分——也就是说,一个大小为n的链表,当我得到一个n的节点I时,我应该做这个

此外,您不应该在没有数据的节点中工作。跳过那些空的

while(current.data != null)
最后,推进当前的
引用,否则将无限期地循环

current = current.next;
另一项意见:

  • 在编辑时,我不知道上下文中这两行是否应该在同一行上。如果是这种情况,那么您可能希望使用常量来代替原始整数来指示要查找的内容-例如,您要查找的名称将位于
    [0]
    中,并且可以称为
    全名

根据我从您的问题中收集的信息,我修改了您的代码。希望这能起作用:

try {
String fullname;
String mobile;
String home;
String mobile2;
String office;

Node current;

    //This loop will start from the first `Node`, check for `null`, then check if it is equal to the `key`. If not, then it will advance to `next`
for(current=first; current!=null && !current.data.equals(key); current = current.next);

    //the loop will terminate if current is null or is equal to key. If it is equal to key, we should display data.
if(current.data.equals(key))
{

    String splitter[]= current.data.split(" ");

    fullname=splitter[0];
    mobile=splitter[1];
    home=splitter[2];
    mobile2=splitter[3];
    office=splitter[4]; 

    mobilefield.setText(mobile);
    homefield.setText(home);
    mobilefield2.setText(mobile2);
    officefield.setText(office);
}
else
    throw new FileNotFoundException("SORRY RECORD NOT LISTED IN DATABASE");

} catch(Exception e) {
    JOptionPane.showMessageDialog(this,e.getMessage()
    +"\nPLEASE TRY AGAIN !","Search Error", JOptionPane.ERROR_MESSAGE);

编辑:添加了注释。

为什么不使用标准的java.util.List?这个问题的解决方案实际上是在我面前展示一幅哈希图片,而不是链接列表。实际上,您将键存储在一个表中,并将实际数据链接到键…这是hashingDivyanshu感谢您的帮助,但现在它给出了nullpointer异常,您能帮我一下吗juni1289@hotmail.com请看实际上我有一个项目,所以我需要帮助它只搜索列表的最后一个节点:(@user1930526:我们所能做的就是提供提示。我们不是来帮你做家庭作业的。请随时询问某个特定答案的说明,但不要提供你的个人电子邮件地址寻求帮助。@makoto我不是要你做我的家庭作业,哈哈,我只是想搜索一个包含fnamelname mobile h等数据的所需节点ome bla bla然后我想拆分它,并显示它从节点列表中搜索节点!@user1930526:如果你有问题,请在这里告诉我们所有人。这样有人会在这里帮助你。它不仅帮助你解决问题,而且还帮助其他可能正在搜索类似问题的人。