求解:Exception in thread "main" java.lang.NullPointerException exception链表Java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不调用show函数的时候,运行报错Exception in thread "main" java.lang.NullPointerException at zicheng.CycLink.play(Josephu.java:65) at zicheng.Josephu.main(Josephu.java:15)65行是//2.数m下for(int j=1;j<m;j++){temp =temp.nextChild;}其中temp= temp.nextChild;是第六十五行,是这一句这就没有赋值成功吗? 试下在main()后面加上 throws Exception试试! package zicheng;public class Josephu { public static void main(String[] args) { CycLink cyclink = new CycLink(); cyclink.setLen(8); cyclink.creatLink(); cyclink.setk(2); cyclink.setm(2); //cyclink.show(); cyclink.play(); }}class Child{ int no; Child nextChild = null; public Child(int no) { //给一个编号 this.no=no; } } class CycLink{ //先定义一个指向链表第一个小孩的引用 Child firstchild = null; Child temp =null; int len = 0; //共有几个小孩 int k=0; int m=0; //设置链表的大小 public void setLen(int len) { this.len = len; } public void setk(int k) { this.k=k; } public void setm(int m) { this.m=m; } public void play() { //1.知道开始数数的人 for(int i=1;i<k;i++) { temp = temp.nextChild; } while(this.len!=1){ //2.数m下 for(int j=1;j<m;j++) { temp = temp.nextChild; } //找到要出圈的前一个小孩 Child temp2 = temp; while(temp2.nextChild!=temp) { temp2 = temp2.nextChild; } //3.讲数到m的小孩推出圈外 temp2.nextChild=temp.nextChild; //让temp指向下一个数数的小孩 temp = temp.nextChild; this.len--; } System.out.println("最后出圈" +temp.no); } //初始化环形链表 public void creatLink() { for(int i=1;i<len;i++) { if(i==1) {//创建第一个小孩 Child ch = new Child(i); this.firstchild = ch; this.temp = ch; } else { //创建最后一个小孩 if(i==len) { //继续创建小孩 Child ch = new Child(i); temp.nextChild = ch; temp = ch; temp.nextChild=this.firstchild; } else { Child ch = new Child(i); temp.nextChild=ch; temp=ch; } } } } public void show() { Child temp = this.firstchild; do{ System.out.print(temp.no+" "); temp = temp.nextChild; }while(temp != this.firstchild); System.out.println("跳出循环了"); }} 是一样的错呀,如果try catch 就说是空指针 Child ch = new Child(i);temp.nextChild=ch;temp=ch;ch 的nextChild 是null然后你每次最后 temp=ch 就等于将ch的引用给temp了 然后 temp的nextChild也是null了然后你又在for(int j=1;j<m;j++){temp =temp.nextChild;}第一次循环将null给temp了,第二次循环时就空指针了 ch的nextChild怎么会是null呢,链表不是这样构建的哇,那我应该怎么办呀? Child nextChild = null; 这句有问题。 还有就是你的 child 类里,又有一个 child 的对象,这样初始化时,是非常麻烦的。 就是这样的说 Child ch = new Child(i); class Child{ int no; Child nextChild = null; public Child(int no) { //给一个编号 this.no=no; } } package zicheng;public class Josephu { public static void main(String[] args)throws Exception { CycLink cyclink = new CycLink(); cyclink.setLen(5); cyclink.creatLink(); cyclink.setk(2); cyclink.setm(2); cyclink.show(); cyclink.play(); }}class Child{ int no; Child nextChild = null; public Child(int no) { //给一个编号 this.no=no; } } class CycLink{ //先定义一个指向链表第一个小孩的引用 Child firstchild = null; Child temp =null; int len = 0; //共有几个小孩 int k=0; int m=0; //设置链表的大小 public void setLen(int len) { this.len = len; } public void setk(int k) { this.k=k; } public void setm(int m) { this.m=m; } public void play() { Child temp = this.firstchild; //1.知道开始数数的人 for(int i=1;i<k;i++) { temp = temp.nextChild; } while(this.len!=1){ //2.数m下 for(int j=1;j<m;j++) { temp = temp.nextChild; } //找到要出圈的前一个小孩 Child temp2 = temp; while(temp2.nextChild!=temp) { temp2 = temp2.nextChild; } //3.讲数到m的小孩推出圈外 temp2.nextChild=temp.nextChild; //让temp指向下一个数数的小孩 temp = temp.nextChild; this.len--; } System.out.println("最后出圈" +temp.no); } //初始化环形链表 public void creatLink() { for(int i=1;i<=len;i++) { if(i==1) {//创建第一个小孩 Child ch = new Child(i); this.firstchild = ch; this.temp = ch; } else { //创建最后一个小孩 if(i==len) { //继续创建小孩 Child ch = new Child(i); temp.nextChild = ch; temp = ch; temp.nextChild=this.firstchild; } else { Child ch = new Child(i); temp.nextChild=ch; temp=ch; } } } } public void show() { Child temp = this.firstchild; do{ System.out.print(temp.no+" "); temp = temp.nextChild; }while(temp != this.firstchild); System.out.println("跳出循环了"); }} 约瑟夫问题~~~ java 动态数据库连接 速度恢复 int型表示范围这么小,却要有四个字节来表示,费解 (关于eclipse生成javadoc)给分100 怎么在JTextPane加上JScollPan 字符串数组的问题??? 嵌套for循环的执行顺序 java无用(转帖) 请问:能够在网页文件中自己定义出现在地址栏中的url吗? 紧急求救!!!!!!!!!!!!!!!!!HELP!! 关于sun.net.ftp的问题 用java读取文本文件矩阵数据源,新手求指点!
at zicheng.CycLink.play(Josephu.java:65)
at zicheng.Josephu.main(Josephu.java:15)65行是
//2.数m下
for(int j=1;j<m;j++)
{
temp =temp.nextChild;
}
其中temp= temp.nextChild;是第六十五行,是这一句这就没有赋值成功吗?
{
CycLink cyclink = new CycLink();
cyclink.setLen(8);
cyclink.creatLink();
cyclink.setk(2);
cyclink.setm(2);
//cyclink.show();
cyclink.play(); }
}class Child{
int no;
Child nextChild = null;
public Child(int no)
{
//给一个编号
this.no=no;
}
}
class CycLink
{
//先定义一个指向链表第一个小孩的引用
Child firstchild = null;
Child temp =null;
int len = 0; //共有几个小孩
int k=0;
int m=0;
//设置链表的大小
public void setLen(int len)
{
this.len = len;
}
public void setk(int k)
{
this.k=k;
}
public void setm(int m)
{
this.m=m;
}
public void play()
{
//1.知道开始数数的人
for(int i=1;i<k;i++)
{
temp = temp.nextChild;
}
while(this.len!=1){
//2.数m下
for(int j=1;j<m;j++)
{
temp = temp.nextChild;
}
//找到要出圈的前一个小孩
Child temp2 = temp;
while(temp2.nextChild!=temp)
{
temp2 = temp2.nextChild;
}
//3.讲数到m的小孩推出圈外
temp2.nextChild=temp.nextChild;
//让temp指向下一个数数的小孩
temp = temp.nextChild;
this.len--;
}
System.out.println("最后出圈" +temp.no);
}
//初始化环形链表
public void creatLink()
{
for(int i=1;i<len;i++)
{
if(i==1)
{//创建第一个小孩
Child ch = new Child(i);
this.firstchild = ch;
this.temp = ch;
}
else
{
//创建最后一个小孩
if(i==len)
{
//继续创建小孩
Child ch = new Child(i);
temp.nextChild = ch;
temp = ch;
temp.nextChild=this.firstchild;
}
else
{
Child ch = new Child(i);
temp.nextChild=ch;
temp=ch;
}
}
}
}
public void show()
{
Child temp = this.firstchild;
do{
System.out.print(temp.no+" ");
temp = temp.nextChild;
}while(temp != this.firstchild);
System.out.println("跳出循环了");
}
}
temp.nextChild=ch;
temp=ch;
ch 的nextChild 是null
然后你每次最后 temp=ch 就等于将ch的引用给temp了 然后 temp的nextChild也是null了
然后你又在
for(int j=1;j<m;j++)
{
temp =temp.nextChild;
}
第一次循环将null给temp了,第二次循环时就空指针了
int no;
Child nextChild = null;
public Child(int no)
{
//给一个编号
this.no=no;
}
}
{
CycLink cyclink = new CycLink();
cyclink.setLen(5);
cyclink.creatLink();
cyclink.setk(2);
cyclink.setm(2);
cyclink.show();
cyclink.play(); }
}class Child{
int no;
Child nextChild = null;
public Child(int no)
{
//给一个编号
this.no=no;
}
}
class CycLink
{
//先定义一个指向链表第一个小孩的引用
Child firstchild = null;
Child temp =null;
int len = 0; //共有几个小孩
int k=0;
int m=0;
//设置链表的大小
public void setLen(int len)
{
this.len = len;
}
public void setk(int k)
{
this.k=k;
}
public void setm(int m)
{
this.m=m;
}
public void play()
{
Child temp = this.firstchild;
//1.知道开始数数的人
for(int i=1;i<k;i++)
{
temp = temp.nextChild;
}
while(this.len!=1){
//2.数m下
for(int j=1;j<m;j++)
{
temp = temp.nextChild;
}
//找到要出圈的前一个小孩
Child temp2 = temp;
while(temp2.nextChild!=temp)
{
temp2 = temp2.nextChild;
}
//3.讲数到m的小孩推出圈外
temp2.nextChild=temp.nextChild;
//让temp指向下一个数数的小孩
temp = temp.nextChild;
this.len--;
}
System.out.println("最后出圈" +temp.no);
}
//初始化环形链表
public void creatLink()
{
for(int i=1;i<=len;i++)
{
if(i==1)
{//创建第一个小孩
Child ch = new Child(i);
this.firstchild = ch;
this.temp = ch;
}
else
{
//创建最后一个小孩
if(i==len)
{
//继续创建小孩
Child ch = new Child(i);
temp.nextChild = ch;
temp = ch;
temp.nextChild=this.firstchild;
}
else
{
Child ch = new Child(i);
temp.nextChild=ch;
temp=ch;
}
}
}
}
public void show()
{
Child temp = this.firstchild;
do{
System.out.print(temp.no+" ");
temp = temp.nextChild;
}while(temp != this.firstchild);
System.out.println("跳出循环了");
}
} 约瑟夫问题~~~