各位大大,帮我看看这个程序吧....写的是一个圈里围着很多小孩子,大家报数,数到3就退出圈子,然后下一个重新开始数,一直到只剩最后一个返回这个小孩的编号.
通过参数指定总人数和数到几退出   我写的代码在下面,然而总是最后一个退出,而且退出N多次,不知道哪里错了麻烦各位帮小弟解答以下   拜谢!
小弟新手!public class CountNQuit{
public static void main(String[] args){
if(args.length != 2){
System.out.println("请输入两个参数以指定小孩的总数和需要数到\"几\"退出的数字!");
System.exit(-1);
} else {
Circle cc = new Circle(Integer.parseInt(args[0]));
int countNum = 0;
Kid k = cc.first;
while (cc.count > 1){
countNum ++;
if(countNum == Integer.parseInt(args[1])){
countNum = 0;
cc.delete(k);
System.out.print(k.id+" ");
}
k = k.right;
}
System.out.println("\n剩下的最后一位是:第"+cc.first.id+"位小孩!");
}
}
}class Kid{
int id;
Kid right;
Kid left;
}class Circle{
int count = 0 ;
Kid first;
Kid last;

Circle (int n){
for(int i=0;i<n;i++){
add();
}
}
void add(){
Kid k = new Kid();
k.id = count + 1;
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;
k = last;
}
count ++ ;
}

void delete(Kid k){
if(count <= 0){
System.out.println("没有小孩在圈中,无法删除!");
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 -- ;
}
}
运行结果:

解决方案 »

  1.   

      我们也写过一个,但是是pig的, 意思是一样的代码如下:
    package day0331;

    class Pig{
    private int no;
    private Pig left;
    private Pig right;

    //猪的编号
    public Pig(int no){
    this.no=no;
    }

    public Pig getLeft() {
    return left;
    }
    public void setLeft(Pig left) {
    this.left = left;
    }
    public int getNo() {
    return no;
    }
    public void setNo(int no) {
    this.no = no;
    }
    public Pig getRight() {
    return right;
    }
    public void setRight(Pig right) {
    this.right = right;
    }
    }

    class PigCircle{
    private int pigNum;
    private Pig[] pigs;

    public PigCircle(int pigNum){
    this.pigNum=pigNum;
    pigs=new Pig[pigNum];
    createPigCircle();
    }



    //创建一个猪圈
    private void createPigCircle(){
    //创建pigNum头猪
    for(int i=0;i<pigNum;i++)
    pigs[i]=new Pig(i+1);

    //构造猪圈
    for(int i=0;i<pigNum;i++){
    if(i==0){//第一头猪
    pigs[i].setLeft(pigs[i+1]);
    pigs[i].setRight(pigs[pigNum-1]);

    }else if(i==pigNum-1){//尾猪
    pigs[i].setLeft(pigs[0]);//第一头猪
    pigs[i].setRight(pigs[i-1]);


    }else{//其他的猪
    pigs[i].setLeft(pigs[i+1]);
    pigs[i].setRight(pigs[i-1]);
    }

    }
    }

    //删除一头猪
    public void deletePig(int index){

    //被删除的猪的右手那个猪的左边设置成被删除的猪的左边
    pigs[index].getRight().//
    setLeft(pigs[index].getLeft());

    pigs[index].getLeft().setRight(pigs[index].getRight());

    pigs[index].setLeft(null);
    pigs[index].setRight(null);
    pigs[index]=null;
    }

    //数三退一
    public void Number3Quit1(){
    int leftPigNum=pigNum;//剩下猪的数目
    int count=1;
    int index=0;
    while(true){
    if(leftPigNum==1) break;
    if(index==pigNum) index=0;
    if(pigs[index]!=null){
    if(count==3){
    deletePig(index);
    count=0;
    leftPigNum--;
    }
    count++;
    }
    index++;//不停的数着
    }


    }
    //打印出最后剩下的猪
    public void printLastLeftPig(){
    for(int i=0;i<pigNum;i++){
    if(pigs[i]!=null){
    System.out.println("最后剩下第"+pigs[i].getNo());

    }
    }

    }

    public int getPigNum() {
    return pigNum;
    }
    public void setPigNum(int pigNum) {
    this.pigNum = pigNum;
    }
    public Pig[] getPigs() {
    return pigs;
    }
    public void setPigs(Pig[] pigs) {
    this.pigs = pigs;
    }

    }


    public class While3Quit1{
    public static void main(String[] args) {
    PigCircle pc=new PigCircle(3);
    pc.Number3Quit1();
    pc.printLastLeftPig();

    }}