public class Count3Quit2 {
public static void main(String[] args) {
KidCircle kc = new KidCircle(500);
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 left;
Kid right;
}class KidCircle {
int count = 0;
Kid first, last;

KidCircle(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.left = k;
k.right = k;
} else {
last.right = k;
k.left = last;
k.right = first;
first.left = k;
last = k;
}
count ++;
}

void delete(Kid k) {
if(count <= 0) {
return;
} else if (count == 1) {
first = last = null;
} else {
k.left.right = k.right;
k.right.left = k.left;

if(k == first) {
first = k.right;
} else if( k == last) {
last = k.left;
}
}
count --;
}
}
请问我在KidCircle类中添加的add()方法中定义了Kid k = new Kid();那在main()函数中,for循环500次,相当于定义了500次Kid k ,不是重复了吗,为什么通过了,谢谢

解决方案 »

  1.   

    500次不是问题。没有bug,能运算的过来,PC就会去做。
      

  2.   

    因为add方法中定义的变量k的有效范围只是在add方法内部,add方法结束后就被回收了,在循环的时候每次都定义一个新的变量k
      

  3.   

    main方法你是设定创建500个对象,将这些对象连着了一圈,没什么重复问题啊
      

  4.   

    我明白了,k是局部的存放在栈里面,出了add()方法就回收了,但是回收了之后,怎么能就上了个对象呢,郁闷了,那位明白,请教下,谢谢
      

  5.   

    我明白了,k是局部的存放在栈里面,出了add()方法就回收了,但是回收了之后,怎么能添加上个对象呢,郁闷了,那位明白,请教下,谢谢
      

  6.   

    每次添加完的时候,这个first,last都指向了第一个,和最后一个了.中间的是由每个对象的left,right连在一起了.
      

  7.   

    谢谢  明白点了  每次调用add()通过left right指向它的堆内存,等退出add()时,局部变量就回收了,但是他所指向的对象被left和ringht连接了,所以没有回收