Java LinkedList中的NullPointer异常
这只是一个愚蠢的问题, 为什么我在删除元素时会出现异常。。。 我刚刚在我的同学身上看到了这段代码,当我运行代码并选择删除时,我得到了NULLPOINTEREXCEPTION 顺便说一句,这是代码…(我从中得到错误) 如果有人能帮我,我很高兴 完整代码。 导入java.io.*; 导入java.util.LinkedListJava 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
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;
}