黑马程序员技术交流社区

标题: i帮我看看哪里有问题ArrayList [打印本页]

作者: 本人已死    时间: 2013-4-13 20:07
标题: i帮我看看哪里有问题ArrayList
本帖最后由 本人已死 于 2013-4-13 21:00 编辑
  1. public static void MaxToMin(ArrayList list) {
  2. System.out.println("从大到小---排序前:" + list.toString());
  3. Collections.sort(list);
  4. for(int i=1;i<=(list.size()+1)/2;i++){
  5. Object obj=list.get(i);
  6. list.set(i,list.get(list.size()+1-i));//这里有改动  改好了不好意思 亲们刚才是这个-》list.set(1,list.get(list.size()+1-i)); 激动了
  7. list.set(list.size()+1-i, obj);
  8. }
  9. System.out.println("-----------排序后:" + list.toString());

  10. }
复制代码
这个方法是为整形集合从大到小排序的,但是没有成功而且找不出错误在哪里

作者: 李尧    时间: 2013-4-13 20:25
改成下面这样应该就好了
  1. public static void MaxToMin(List al) {
  2.                 System.out.println("从大到小---排序前:" + al.toString());
  3.                 Collections.sort(al);
  4.                 System.out.println(al);
  5.                 for(int i=0;i<=(al.size()-1)/2;i++){//size()-1才是最后角标
  6.                 Object obj=al.get(i);
  7.                 al.set(i,al.get(al.size()-1-i));//这里是设置i角标,不是1角标
  8.                 al.set(al.size()-1-i, obj);
  9.                 }
  10.                 System.out.println("-----------排序后:" + al.toString());

  11.                 }
复制代码

作者: 沈浩    时间: 2013-4-13 20:35
public static void MaxToMin(ArrayList list)
                {

                                System.out.println("从大到小---排序前:" + list.toString());

                                Collections.sort(list);

                                for(int i=0;i<list.size()/2;i++)
                                        {

                                                Object obj=list.get(i);

                                                list.set(i,list.get(list.size()-i-1));

                                                list.set(list.size()-i-1, obj);

                                        }

                                System.out.println("-----------排序后:" + list.toString());



                }
这样就OK啦     你把要替换的index没搞清楚
作者: 本人已死    时间: 2013-4-13 20:45
李尧 发表于 2013-4-13 20:25
改成下面这样应该就好了

我的参数是ArrayList 这样没有关系吗
作者: 李尧    时间: 2013-4-13 20:48
本帖最后由 李尧 于 2013-4-13 20:51 编辑
本人已死 发表于 2013-4-13 20:45
我的参数是ArrayList 这样没有关系吗

都一样了..我建了个集合测试 声明类型写的是List 你写ArrayList一样..
作者: 陈圳    时间: 2013-4-13 20:55
  1. System.out.println("从大到小---排序前:" + list.toString());
  2.                         Collections.sort(list);
  3.                         /*for(int i=1;i<=(list.size()+1)/2;i++){//这里根本不可能实现反转排序,Collections有一个反转排序的方法
  4.                                 //i==1,i<=2就循环两次.size()为4的集合,2次换不了
  5.                         Object obj=list.get(i);
  6.                         list.set(1,list.get(list.size()+1-i));//这里会越界.当list.size()=4+1-1时就挂了
  7.                         list.set(list.size()+1-i, obj);
  8.                         }*/
  9.                         //我用你的想法把排序排出来.
  10.                         int length=list.size()-1;
  11.                                 for(int i=0;i<list.size()/2;i++,length--)
  12.                                         list.set(i,list.set(length,list.get(i)));
  13.                         System.out.println("-----------排序后:" + list.toString());
复制代码

作者: 本人已死    时间: 2013-4-13 20:58
李尧 发表于 2013-4-13 20:48
都一样了..我建了个集合测试 声明类型写的是List 你写ArrayList一样..

:victory:谢谢  谢谢 这个破数纠结我一天了 我刚才用了一下  谢谢:lol
作者: 本人已死    时间: 2013-4-13 21:04
陈圳 发表于 2013-4-13 20:55

嗯 谢谢  我一直以为集合的角标是从1开始的  低级错误了  见笑了谢了~
作者: 崔宝东    时间: 2013-4-13 21:10
public static void MaxToMin(List al) {
                System.out.println("从大到小---排序前:" + al.toString());
//                正序排序的结果;
                Collections.sort(al);
                System.out.println(al);
//                倒序排序的结果;
                for (int i = 0; i < (al.size())/2; i++) {// size()-1才是最后角标
                        Object obj = al.get(i);
//                        public E set(int index,E element)用指定的元素替代此列表中指定位置上的元素。
                        al.set(i, al.get(al.size() - 1 - i));
                        al.set(al.size() - 1 - i, obj);
                }
                System.out.println("-----------排序后:" + al.toString());
作者: 本人已死    时间: 2013-4-13 21:35
崔宝东 发表于 2013-4-13 21:10
public static void MaxToMin(List al) {
                System.out.println("从大到小---排序前:" + al.toString());
...

谢谢:lol




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