当前位置: 代码迷 >> J2SE >> 求解:Exception in thread "main" java.lang.NullPointerException解决方法
  详细解决方案

求解:Exception in thread "main" java.lang.NullPointerException解决方法

热度:190   发布时间:2016-04-23 20:20:36.0
求解:Exception in thread "main" java.lang.NullPointerException
直接上代码哈。视频里的例子,我编译通过了,但是运行就报这个错误,我找不到错误在哪儿啊。
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("条出循环了");
}
}


------解决方案--------------------
试下在main()后面加上 throws Exception试试!
------解决方案--------------------
代码贴贴好。


------解决方案--------------------
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了,第二次循环时就空指针
------解决方案--------------------
    Child nextChild = null;   这句有问题。  还有就是你的 child 类里,又有一个 child 的对象,这样初始化时,是非常麻烦的。
------解决方案--------------------
引用:
    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)
{

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;
  相关解决方案