//100个人报数,报到14的退出,剩下的人继续从1开始报,问最后剩谁?
package com.itheima2;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test5 {
public static void main(String[] args) {
//初始化排队总人数和报告的数
int TotalNumber = 100;
int CountNumber = 14;
//调用自定义的方法,得到最后一个元素
int TheLastNumber = GetLastNumberFromQuene(TotalNumber, CountNumber);
//打印该元素
System.out.println("剩下的最后一个元素是:" + TheLastNumber);
}
//定义该方法,使用ListIterator迭代器
public static int GetLastNumberFromQuene(int a, int b) {
//创建两个List集合,分别用来存放总人数的元素,和迭代时被退出的元素
List<Integer> arrList = new ArrayList<Integer> ();
List<Integer> arrList_quit = new ArrayList<Integer> ();
//使用for循环,逐个项arrList中添加元素,元素编号为自然数顺序
for (int i = 0; i < a; i++) {
arrList.add(i+1);
}
//创建一个迭代器,初始化为arrList的迭代器
ListIterator<Integer> iter = arrList.listIterator();
//开始执行判断和删除元素的过程。如果元素的长度不为1,继续执行
while (arrList.size() > 1) {
Integer temp = null;
//for循环体用于执行一个报数轮回,即执行一次for语句,删除一个元素
for (int x = 0; x < b; x++) {
//当迭代器遍历到集合末尾时,重新给iter赋值,使其指向集合的开头
if (!iter.hasNext()) {
iter = arrList.listIterator();
temp = iter.next();
}
//当没有遍历到末尾时,指向下一个元素,并返回给临时对象temp
else {
temp = iter.next();
}
}
//如果该集合长度不为1,将被删除的对象存储到arrList_quit集合中
if (arrList.size() > 1)
arrList_quit.add(temp);
try {
//然后删除这个元素
iter.remove();
} catch (IllegalStateException e) {
e.printStackTrace();
}
//如果这句没有注释,将会打印每次遍历删除时,集合的所有值。可以更详细的看出,每次迭代删除的是哪一个元素。
// System.out.println(arrList);
}
System.out.println("元素的退出顺序为:");
//打印退出顺序
System.out.println(arrList_quit);
return arrList.get(0);
}
}
|
|