您的位置:首页 > 编程语言 > Java开发

跟韩老师学java——Java实现丢手帕问题

2011-12-30 11:59 369 查看
package FistTest;

public class Demo1 {

public static void main(String[] args) {

// TODO Auto-generated method stub

CycLink cyclink =new CycLink();

cyclink.setLen(100);

cyclink.creatLink();

cyclink.setK(2);

cyclink.setM(2);

cyclink.show();

cyclink.play();

}

}

class Child{

int no;

Child nextChileChild=null;

public Child(int no){

this.no=no;

}

}

//环形链表

class CycLink{

//先定义一个指向链表第一个小孩的那个引用

//指向第一个小孩的引用,不能动

Child firstChild=null;

Child temp=null;

int len=0;//表示共有几个小孩

int k;

int m;

//设置链表大小

public void setLen(int len){

this.len=len;

}

public void setK(int k){

//设置第几个人开始数数

this.k=k;

}

public void setM(int m){

//设置m

this.m=m;

}

public void play(){

//1找到开始数数的人

Child temp=this.firstChild;

for(int i=1;i<k;i++){

temp=temp.nextChileChild;

}

//数M下

while(this.len!=1){

for (int j = 1; j < m; j++) {

temp=temp.nextChileChild;

}

Child temp2=temp;//找到要出圈的前一个小孩

while (temp2.nextChileChild!=temp) {

temp2=temp2.nextChileChild;

}

//讲数到M的小孩 退出圈

temp2.nextChileChild=temp.nextChileChild;

temp=temp.nextChileChild;

System.out.println("现在出圈的是"+temp.no);

this.len--;

}

//打印最优一个小孩

System.out.print("最后出圈的是:"+temp.no);

}

//初始化链表

public void creatLink(){

for (int i = 1; i <= len; i++) {

if (i==1) {

//创建第一小孩

Child child=new Child(i);

this.firstChild=child;

this.temp=child;

}else

{

if (i==len) {

Child child =new Child(i);

temp.nextChileChild=child;

temp=child;

temp.nextChileChild=this.firstChild;



}else {



//继续创建小孩

Child child =new Child(i);

temp.nextChileChild=child;

temp=child;}

}



}



}

public void show(){



Child temChild=this.firstChild;

do {

System.out.println(temChild.no+"###");

temChild=temChild.nextChileChild;

} while (temChild!=this.firstChild);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: