public class TestCount{
public static void main(String[] args){
kidCicrle kc = new kidCicrle(0);
int countNum = 0;
kid k = kc.first;
while(kc.count >1){
countNum++;
if(countNum == 3){
countNum = 0;
kc.delete(k);
}
k = k.right;
}
System.out.println(kc.first.id);
}
}
class kid{
int id;
kid right;
kid left;
}
class kidCicrle{
int count = 0;
kid first,last;
kidCicrle(int n){
for(int i = 0;i<n;i++){
add();
}
}
void add(){
kid k = new kid();
k.id = count;
if(count<=0){
first = k;
last = k;
k.right = k;
k.left = k;
}
else{
last.right = k;
k.right = first;
last = k;
}
count++;
}
void delete(kid k){
if(count <= 0){
System.out.println("error");
}else if(count == 1){
first = last = null;
}
else{
k.left.right = k.right;
k.right.left = k.left;
if(k == first){
first = k.right;
}
if(k == last){
last = k.left;
}
}
count--;
}
}
程序编译能通过,但运行时却抛出异常
Exceprion in thread "main" java.lang.NullpointerException
at kidCicrle.delete<TestCount.java:62>
at TesrCount.main<TestCount.java:10>
------解决方案--------------------
Exceprion in thread "main" java.lang.NullpointerException
at kidCicrle.delete<TestCount.java:62>
这两句话,你没考虑有可能 k.left为null 以及 k.right为null 的特殊情况:
k.left.right = k.right;
k.right.left = k.left;
------解决方案--------------------
- Java code
public class TestCount { public static void main(String[] args) { kidCicrle kc = new kidCicrle(20); int countNum = 0; kid k = kc.first; while (kc.count>0&&k!=null){//加k!=null约束 countNum++; if (countNum == 3){ countNum = 0; kc.delete(k); } k = k.son; } for(kid k1 = kc.first;k1 != null;k1 = k1.son){//链表遍历 System.out.print(k1.id +" "); } }}class kid { int id = 0; kid father = null; kid son = null;}class kidCicrle { int count = 0; kid first = null; kid last = null; kidCicrle(int n) { for (int i = 0;i<n;i++){//你赋值为0,对照你自己的程序 add(); } } void add() { kid k = new kid(); k.id = count; if (count==0){ first=k; last=k; first.son = last; last.father = first; } else{ k.father = last;//注意双向都要连,避免照成空指针异常 last.son = k; last = k; } count++; } void delete(kid k){ if (count <= 0){ System.out.println("error"); }else if (count==1){ first = null; last = null; }else {//双向链表,把引用搞清楚。 if (k==first){ k.son.father = null; first = k.son; } else if (k==last){ k.father.son=null; last = k.father; } else{ k.son.father = k.father; k.father.son = k.son; } } count--; }}