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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouchao 中级黑马   /  2013-7-29 10:01  /  2033 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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());
求高手指教原因,以及是否有解决办法

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

12 个回复

倒序浏览
楼主入学测试了?{:soso_e179:}
回复 使用道具 举报
杨兴庭 发表于 2013-7-29 10:59
楼主入学测试了?

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

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

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

如果是基础性的东西应该还好 谢谢啊!
回复 使用道具 举报
zhouchao 发表于 2013-7-29 11:18
如果是基础性的东西应该还好 谢谢啊!

不用客气,,祝愿顺利入学
回复 使用道具 举报
                             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;
                                }
回复 使用道具 举报
Mr_Free 发表于 2013-7-29 11:15
哥们,我想说我对题目的理解是不是100%14 ?????????如果我的想法是对的话就能说你的问题出在哪里 ...

我是这么理解的,题目原意应该是100个人中最后剩1个,能把你的思路说下不,学习学习
回复 使用道具 举报
denghui1010 发表于 2013-7-29 11:24
if(count == 14)
                                {
                      ...

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

非常感谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马