黑马程序员技术交流社区
标题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要...
[打印本页]
作者:
jijiangrui
时间:
2016-5-30 10:39
标题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要...
package com.itheima;
import java.util.ArrayList;
public class Test10 {
public static void main(String[] args) {
// 定义一个TreeMap集合.
TreeMap<Integer,Person> tm = new TreeMap<>();
//定义循环,将编号作为键,人作为值存入TreeMap集合.
for (Integer i = 1; i <= 100; i++) {
tm.put(i, new Person());
}
//创建GetIndex对象,调用round方法获取结果.
GetIndex gi = new GetIndex(tm);
gi.round();
}
}
//定义一个类获取所需要的结果.
class GetIndex {
//把TreeMap集合作为参数传入本类中.
private TreeMap<Integer,Person> tm;
GetIndex(TreeMap<Integer,Person> tm) {
this.tm = tm;
}
//定义计数器,记录报数情况.
int count = 0;
//定义ArrayList集合,用于存储在遍历过程中需要删除的键.
ArrayList<Integer> al = new ArrayList<>();
//将TreeMap集合转化为Set集合方便进行遍历,Set集合存储的是TreeMap集合中的键.
Set<Integer> set = null;
//用于对遍历到最后一个元素时进入下次遍历的判断.
Integer lastKey = null;
int size = 0;
//定义round方法进行递归.
public void round() {
//删除TreeMap集合中需删除的映射关系,根据ArrayList集合中存储的键值.
for (int y = 0; y < al.size(); y++) {
tm.remove(al.get(y));
}
System.out.println(al);//测试用
al.clear();//清空ArrayList集合.
set = tm.keySet();//刷新遍历一次后的Set集合.
lastKey = tm.lastKey();
size = tm.size();
//定义高级for循环对Set集合中存储的键进行遍历.
for(Integer x : set) {
//当TreeMap集合中只剩一个元素时,打印这个元素的值,该编号就是所要的结果.
if (size == 1) {
System.out.println(lastKey);
break;
}
//遍历过程中根据计数器记录需删除的元素,存入ArrayList集合中.
count++;
if (14 == count) {
al.add(x);
count = 0;
}
//当遍历完成一次时,使用递归方法,开始下次遍历.
if (x == lastKey)
round();
}
}
}
class Person {
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2