A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迷途羔羊 中级黑马   /  2015-8-31 00:28  /  242 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//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);
                }
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马