黑马程序员技术交流社区

标题: 集合迭代中移除元素 [打印本页]

作者: zhouchao    时间: 2013-7-29 10:01
标题: 集合迭代中移除元素
本帖最后由 zhouchao 于 2013-7-29 12:07 编辑

有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
    然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人
这个题目我有个思路是这样的
建立集合将1-100有序存入
对集合中元素进行迭代 在计数器为十四的时候将元素进行移除,并返回继续进行迭代 代码如下
public class Test10 {
        
        static int count = 1;
        
        public static void main(String[] args) {
                ArrayList al = new ArrayList();
                for(int x=1;x<=100;x++)
                {
                        al.add(x);
                }
               
                System.out.println(theLast(al));
        }
        private static ArrayList theLast(ArrayList al)
        {
                Iterator it = al.iterator();
               
                while(true)
                {
                        
                        //System.out.println("zc");
                        if(it.hasNext())
                        {                                
                                if(count != 14)
                                {
                                        //14被移除后 无法继续下面的it.next()
                                        System.out.println(it.next());
                                        count++;
                                }
                                if(count == 14)
                                {
                                        System.out.println(al.remove(it.next()));
                                        //System.out.println(al);
                                        count = 0;
                                        //System.out.println(count);
                                        continue;
                                }
                        }
                        else
                                {
                                        if(al.size()>1)
                                                theLast(al);
                                        else
                                                return al;
                                }
                }
        }
}
在14被移除后 无法继续下面的it.next()
                                        System.out.println(it.next());
求高手指教原因,以及是否有解决办法


作者: 杨兴庭    时间: 2013-7-29 10:59
楼主入学测试了?{:soso_e179:}
作者: zhouchao    时间: 2013-7-29 11:07
杨兴庭 发表于 2013-7-29 10:59
楼主入学测试了?

是的啊  感觉有点难!自己掌握的还不是很好,没法灵活运用啊  还得加强学习 看到论坛上的高手们,感觉差距还是挺大的啊 在纠结要不要申请面试 版主有什么建议吗
作者: zhouchao    时间: 2013-7-29 11:07
杨兴庭 发表于 2013-7-29 10:59
楼主入学测试了?

是的啊  感觉有点难!自己掌握的还不是很好,没法灵活运用啊  还得加强学习 看到论坛上的高手们,感觉差距还是挺大的啊 在纠结要不要申请面试 版主有什么建议吗
作者: 杨兴庭    时间: 2013-7-29 11:11
zhouchao 发表于 2013-7-29 11:07
是的啊  感觉有点难!自己掌握的还不是很好,没法灵活运用啊  还得加强学习 看到论坛上的高手们,感觉差 ...

可以申请免试的,面试的题目不是很难都是基础性东西,,,注意总结下动态代理和文件夹复制,还有7k面试题中的单例,能说的只有这么多了。。加油
作者: Mr_Free    时间: 2013-7-29 11:15
哥们,我想说我对题目的理解是不是100%14 ?????????如果我的想法是对的话就能说你的问题出在哪里了
21分你就考试了?  颠覆我的常识。
作者: zhouchao    时间: 2013-7-29 11:18
杨兴庭 发表于 2013-7-29 11:11
可以申请免试的,面试的题目不是很难都是基础性东西,,,注意总结下动态代理和文件夹复制,还有7k面试题 ...

如果是基础性的东西应该还好 谢谢啊!
作者: 杨兴庭    时间: 2013-7-29 11:22
zhouchao 发表于 2013-7-29 11:18
如果是基础性的东西应该还好 谢谢啊!

不用客气,,祝愿顺利入学
作者: denghui1010    时间: 2013-7-29 11:24
                             if(count == 14)
                                {
                                        System.out.println(al.remove(it.next()));//这里并发操作了,改成System.out.println("remove:" + it.next()); it.remove();
                                        //System.out.println(al);                                                      
                                        count = 0;//这里从0数到14就15个了,改成1,还有其它错你再看看吧
                                        //System.out.println(count);
                                        continue;
                                }
作者: zhouchao    时间: 2013-7-29 11:26
Mr_Free 发表于 2013-7-29 11:15
哥们,我想说我对题目的理解是不是100%14 ?????????如果我的想法是对的话就能说你的问题出在哪里 ...

我是这么理解的,题目原意应该是100个人中最后剩1个,能把你的思路说下不,学习学习
作者: zhouchao    时间: 2013-7-29 11:35
denghui1010 发表于 2013-7-29 11:24
if(count == 14)
                                {
                      ...

非常感谢!
作者: 李江    时间: 2013-7-29 11:45
  System.out.println(al.remove(it.next()));  你不能用al删除元素,回到找ArrayList角标混乱,应该使用iterator中的remove方法,这个方法使删除后的ArrayList重新排序。
作者: zhouchao    时间: 2013-7-29 12:06
graspDN 发表于 2013-7-29 11:45
System.out.println(al.remove(it.next()));  你不能用al删除元素,回到找ArrayList角标混乱,应该使用it ...

非常感谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2