两个类:Person.java GetOut.java
Person.java 人类,包含一个名字属性,一个报数的方法
GetOut.java 计数类,包含一个队列,添加100个人进队列后,经过out()方法,剩下唯一的幸存者。
^_^ 勇敢者游戏,I love this game !!
附源程序:
/*
* Author : Lislie
* Time : 2007-9-13 19:32
* About : 100个人做游戏,让100个人围成一个大圈,每个人分别报数,报数方式是从1开始到7结束,报到7的人退出游戏,余下的人继续报数,
* 从推出的下一个人开始从新报1 ,报7的人退出,一次循环,找出最终获胜选手。
* Founction: class 人
*
* */
package arithmetic.person;
public class Person {
String name;
public Person(String name) {
this.name = name;
}
public int callNum(int a) {
return ++a;
}
}
/*
* Author : Lislie
* Time : 2007-9-13 19:32
* About : 100个人做游戏,让100个人围成一个大圈,每个人分别报数,报数方式是从1开始到7结束,报到7的人退出游戏,余下的人继续报数,
* 从推出的下一个人开始从新报1 ,报7的人退出,一次循环,找出最终获胜选手。
* Founction:
*
* */
package arithmetic.person;
import java.util.ArrayList;
public class GetOut {
ArrayList array; // 队列
public GetOut(int NUM) {
array = new ArrayList();
// 人类初始化,加入队列中
for(int i=0;i<NUM;i++)
array.add(new Person("a" + i));
}
public Person out() {
int count = 0; // 喊吧
while(array.size()>1) {
for(int i=0;i<array.size();i++) {
Person p = (Person)array.get(i);
count = p.callNum(count);
// 喊道7,出局 计数从新开始
if(count == 7) {
array.remove(i);
count = 0; // 计数归0
}
}
}
// 唯一的幸存者
return (Person)array.get(0);
}
public static void main(String args[]) {
int NUM = 100;
GetOut go = new GetOut(NUM);
Person p = go.out();
System.out.println("My name is " + p.name + "!");
}
}
运行结果:
My name is a58!