黑马程序员技术交流社区

标题: 这个方法哪错了 [打印本页]

作者: liqi    时间: 2014-9-4 07:45
标题: 这个方法哪错了
这个方法是对传入的集合元素进行删除操作,为什么不能删除,集合的长度永远不变
public static List<Person> deLis(List<Person> arrs){
                LinkedList<Person> arrs2 = new LinkedList<Person>();
                int count = 0;
                int number = 0;
            int len = arrs.size();
                while(len>1)
                {
                    len = arrs.size();
                        System.out.println(len);
                    for(int x=0;x<len;x++){
                      count = count+1 ;
                      if(count%14==0){
                               
                                arrs2.add(arrs.get(x));
                                number = number++;
                                }
                      }
                    for(int y=0;y<number;y++){
                            arrs.remove(arrs2.removeLast());
                      }
                    
                }
               
                return arrs;
                    
        }
作者: 谢建平    时间: 2014-9-4 10:33
while(len>1)   这个len  你都没改过吧....
作者: liqi    时间: 2014-9-4 10:55
谢建平 发表于 2014-9-4 10:33
while(len>1)   这个len  你都没改过吧....

谢谢,已经解决了。错的地方在两个自增的地方
你的意思是 最后剩下的在 1~13 之间吧,不会出现这种情况的,因为如果>1, 会继续循环,而count会在上一次循环的基础上自增,所以就算只有两个数,也会自增到14的倍数
作者: 王凯路路    时间: 2014-9-4 11:37
100个人算剩下的最后一个人的那个 ?     

作者: 谢建平    时间: 2014-9-4 15:26
liqi 发表于 2014-9-4 10:55
谢谢,已经解决了。错的地方在两个自增的地方
你的意思是 最后剩下的在 1~13 之间吧,不会出现这种情况的 ...

你一说我想起来了... number = number++;  这种有问题    没变 ..0.0
作者: 谢建平    时间: 2014-9-4 15:47
还有1到13    比如当len为3时 你的x只要自加三次就大于len了  count来不及加下次到14的倍数循环条件就不成立了吧。
作者: liqi    时间: 2014-9-4 16:20
王凯路路 发表于 2014-9-4 11:37
100个人算剩下的最后一个人的那个 ?

恩  是的,我++写在后面了,count一直是零,改到前面就好了
作者: liqi    时间: 2014-9-4 16:22
谢建平 发表于 2014-9-4 15:47
还有1到13    比如当len为3时 你的x只要自加三次就大于len了  count来不及加下次到14的倍数循环条件就不成 ...

错误已经找出来了,我原代码是 count= count++;  因为一直是零 ,所以改成count= count+1,
应该改为 ++count,就好了





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