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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡志翔 中级黑马   /  2013-9-9 11:45  /  1070 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.util.*;


  2. public class ListDemo2 {

  3.         
  4.         public static void main(String[] args) {
  5.                 Test2();
  6.         }

  7.         public static void Test2() {
  8.                 List<Integer> data = new ArrayList<Integer>();
  9.                 data.add(0);
  10.                 data.add(1);
  11.                 data.add(2);
  12.                 data.add(3);
  13.                 data.add(4);
  14.                 data.add(5);
  15.                 data.add(6);

  16.                 System.out.println(data.toString());
  17.                
  18.                 for (int i = 0; i < data.size(); i++) {
  19.                         
  20.                         data.add(data.get(i));
  21.                         data.remove(data.get(i));
  22.                 }
  23.                 System.out.println(data.toString());


  24.                 for (int i = 0; i < data.size(); i++) {
  25.                         
  26.                         data.add(data.get(i));
  27.                         data.remove(data.get(i));
  28.                 }
  29.                 System.out.println(data.toString());
  30.         }

  31. }
复制代码
输出的结果是
[0, 1, 2, 3, 4, 5, 6]
[1, 3, 5, 0, 4, 2, 6]
[3, 0, 2, 1, 4, 5, 6]
为什么首位的0并没有放在最后?如何解决?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

4 个回复

倒序浏览
不没明白你的题目是什么意思,
但是你的代码的原理我给你讲解一下:你的第一个for循环,是先增加数据,然后在移除数据。循环6次。
第一次:移除第1个(此时 list集合已经改变),在最后增加一个移除的数
第二次:移除第2个(此时 list集合已经改变),在最后增加一个移除的数
......
一共循环6次。
你说的0 肯定不能到最后。最后一定是6.
如何解决:这个问题我不知道你怎么想的,所以给你一下建议:
1.使用list新建一个集合,然后倒叙放入
2.你可以使用排序功能
3.你可以使用Treeset集合进行排序

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
你的代码我给你稍微改了一下,

public class ListDemo2 {

        
        public static void main(String[] args) {
                Test2();
        }

        public static void Test2() {
                List<Integer> data = new ArrayList<Integer>();
                data.add(0);
                data.add(1);
                data.add(2);
                data.add(3);
                data.add(4);
                data.add(5);
                data.add(6);

                System.out.println(data.toString());
               
                for (int i = 0; i < data.size(); i++) {
                        System.out.print(data.get(i)+"***");
                        data.add(data.get(i));
                        data.remove(data.get(i));            
                }
                System.out.println("\n"+data.toString());


                for (int i = 0; i < data.size(); i++) {
                    System.out.print(data.get(i)+"***");
                    data.add(data.get(i));
                    data.remove(data.get(i));
            }
            System.out.println("\n"+data.toString());
        }
}

结果是:

[0, 1, 2, 3, 4, 5, 6]
0***2***4***6***2***6***6***
[1, 3, 5, 0, 4, 2, 6]
1***5***4***6***5***6***6***
[3, 0, 2, 1, 4, 5, 6]

我相信通过这个输出结果你就能明白了。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
首先,要明确data.add(E e)是什么意思?
它是将指定的元素添加到data列表尾部。
data.get(int index):返回此列表指定位置的元素。
而data.remove(int index)呢?它是移除data列表指定位置的元素。
你的本意是添加一个顶部的元素到尾部,再删除这个顶部元素。
然而在你的代码中data.add(data.get(i));当i=o时,获取顶部的元素,而当i=1时,返回的下标是1.获取的值就不是顶部的元素。
同理你的data.remove(data.get(i)); 也是同样的毛病
所以你将代码改成data.add(data.get(0)); data.remove(0);自然就可以了


回复 使用道具 举报
楼主,你好,如果您的问题解决了!


请把您问题的未解决更改为已解决

谢谢合作!

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