Java LinkedList中的NullPointer异常

Java LinkedList中的NullPointer异常,java,nullpointerexception,linked-list,nodes,singly-linked-list,Java,Nullpointerexception,Linked List,Nodes,Singly Linked List,这只是一个愚蠢的问题, 为什么我在删除元素时会出现异常。。。 我刚刚在我的同学身上看到了这段代码,当我运行代码并选择删除时,我得到了NULLPOINTEREXCEPTION 顺便说一句,这是代码…(我从中得到错误) 如果有人能帮我,我很高兴 完整代码。 导入java.io.*; 导入java.util.LinkedList public class Main { public static void main(String[]args) throws Exception { Buffe

这只是一个愚蠢的问题, 为什么我在删除元素时会出现异常。。。 我刚刚在我的同学身上看到了这段代码,当我运行代码并选择删除时,我得到了NULLPOINTEREXCEPTION

顺便说一句,这是代码…(我从中得到错误)

如果有人能帮我,我很高兴

完整代码。 导入java.io.*; 导入java.util.LinkedList

public class Main 
{
public static void main(String[]args) throws Exception
{
    BufferedReader x = new BufferedReader(new InputStreamReader(System.in));

    LinkedList<String> list = new LinkedList<>();
    list.add("Jarn");
    list.add("Zhai");
    System.out.println("List:..");
    //System.out.println();
    System.out.println(list);
    System.out.println();

    String ch,in,fi,del;
    boolean kita = false;
    int size=0,data;   
    Node head=null, tail=head; 

    do
    {
        System.out.println("Choose Option.\n1-Insert\n2-Delete\n3-Dispay\n4-Find\n5-Quit");
        System.out.println();
        System.out.println("Choice: ");
        ch=x.readLine();
        System.out.println();
        switch (ch) 
        {
            case "1":
                System.out.println("Enter Name you Want to Insert..");
                in=x.readLine();
                list.addLast(in);
                System.out.println("Name "+in+" was successfully inserted..");
                System.out.println();
                break;
            case "2":
                if(size>=0)
                {  
                 System.out.println("Enter name to del..");  
                 del=x.readLine();

                 if(!(head.data).equals(del)) 
                 {
                     tail=head;   
                     Node temp=head.next;
                     while(temp!=null)
                     {
                         if((temp.data).equals(del))
                         {
                             tail.next=temp.next;
                             size--;
                             break;
                         }
                         tail=temp;
                         temp=temp.next;
                     }
                 }
                 else
                 {
                     head=head.next;
                 }   
                 }
                else 
                {
                    System.out.println("LinkedList is empty"); 
                }
                break;
            case "3":
                System.out.println("List..");
                System.out.println();
                System.out.println(list);
                break;
            case "4":
                System.out.println("Enter name You Want to Find..");
                fi=x.readLine();
                while(size!=(list.size()))
                {
                    String temp = list.get(size);
                    if(temp.equalsIgnoreCase(fi))
                    {
                        kita=true;
                    }
                    size++;
                }
                if(kita)
                {
                    System.out.println("Name: "+fi+" exists!.");
                    System.out.println();
                }
                else
                    {
                        System.out.println("Name: "+fi+" not found!.");
                        System.out.println();
                    }
                break;
            case "5":
                System.out.println("Thank You..");
                break;
            default:
                System.out.println("INVALID OPTION..");
                System.out.println();
                break;
        }
    }
    while(!ch.equals("5"));
}
    class Node  
 {  
  String data;   
  Node next;   
  Node(String d)// node class Constructor.   
  {  
        data = d;   
       next= null;   
  }  
公共类主
{
公共静态void main(字符串[]args)引发异常
{
BufferedReader x=新的BufferedReader(新的InputStreamReader(System.in));
LinkedList=新建LinkedList();
列表。添加(“Jarn”);
列表。添加(“翟”);
System.out.println(“列表:…”;
//System.out.println();
系统输出打印项次(列表);
System.out.println();
字符串ch、in、fi、del;
布尔kita=false;
int size=0,数据;
节点头=空,尾=头;
做
{
System.out.println(“选择选项。\n1插入\n2删除\n3显示\n4查找\n5退出”);
System.out.println();
System.out.println(“选项:”);
ch=x.readLine();
System.out.println();
开关(ch)
{
案例“1”:
System.out.println(“输入要插入的名称…”);
in=x.readLine();
list.addLast(in);
System.out.println(“名称”+in+“已成功插入…”);
System.out.println();
打破
案例“2”:
如果(大小>=0)
{  
System.out.println(“为del.输入名称”);
del=x.readLine();
如果(!(head.data).equals(del))
{
尾=头;
节点温度=head.next;
while(temp!=null)
{
如果((温度数据).equals(del))
{
tail.next=temp.next;
大小--;
打破
}
尾=温度;
温度=下一个温度;
}
}
其他的
{
head=head.next;
}   
}
其他的
{
System.out.println(“LinkedList为空”);
}
打破
案例“3”:
System.out.println(“列表”);
System.out.println();
系统输出打印项次(列表);
打破
案例“4”:
System.out.println(“输入要查找的名称…”);
fi=x.readLine();
while(size!=(list.size())
{
String temp=list.get(大小);
if(温度等信号情况(fi))
{
kita=正确;
}
大小++;
}
如果(kita)
{
System.out.println(“名称:“+fi+”存在!”);
System.out.println();
}
其他的
{
System.out.println(“名称:“+fi+”未找到!”);
System.out.println();
}
打破
案例“5”:
System.out.println(“谢谢你”);
打破
违约:
System.out.println(“无效选项…”);
System.out.println();
打破
}
}
而(!ch.equals(“5”));
}
类节点
{  
字符串数据;
节点下一步;
Node(String d)//节点类构造函数。
{  
数据=d;
next=null;
}  
}


}

感觉就像是在尝试将自定义链表与Java Collections框架中的
LinkedList
混合。这可能会让你感到困惑

事实证明,
List
指定了一个函数,该函数允许您更直接地删除内容

这将使delete函数case语句变成:

System.out.println("Enter name to del..");  
String del=x.readLine();
boolean removed = list.remove(del);
if(removed) {
    System.out.println(del + " was removed successfully.");
} else {
    System.out.println(del + " isn't in the list!");
}
…从此,您可以完全忘记整个定制
节点
业务。它没有添加任何内容

请注意:
del
在原始代码中未定义为有效变量,您不太可能再次需要它。它可以是内联的,但我觉得这更好地说明了同步流


诚然,我强烈感觉这是一项旨在让你设计自己的链表结构的作业,但我会与你的教授/助教对此进行三次检查。

在删除之前,你需要找到要删除的元素。 使用while循环

while(当前数据!=n)


可以发布错误吗?线程“main”java.lang.NullPointerException中的异常位于main.main(main.java:45)java结果:1请使用完整堆栈跟踪编辑您的问题。还用行表示数字
45
。如果(!(head.data).equals(del)){tail=head;Node temp=head.next;while(temp!=null){上次编辑没有改善你的帖子。你删除了所有的初始化。我想问题是
head
del
head。当你阅读它们时,数据
null
。你试过使用调试器吗?我正要问他,使用java的LinkedList和创建一个自我管理器的目的是什么de remove,我认为这个问题已经得到了正确的回答,因此我的回答是a+1。如果OP使用自己的节点结构,并编写了自定义链表实现,那么答案是肯定的。但是,因为他们使用的是普通的ol'
LinkedList
,使用的是
remove()
System.out.println("Enter name to del..");  
String del=x.readLine();
boolean removed = list.remove(del);
if(removed) {
    System.out.println(del + " was removed successfully.");
} else {
    System.out.println(del + " isn't in the list!");
}
        {

         prev=current;

         current=current.link;

        }