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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 本人已死 中级黑马   /  2013-4-13 20:07  /  1587 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 本人已死 于 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. }
复制代码
这个方法是为整形集合从大到小排序的,但是没有成功而且找不出错误在哪里

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

9 个回复

正序浏览
崔宝东 发表于 2013-4-13 21:10
public static void MaxToMin(List al) {
                System.out.println("从大到小---排序前:" + al.toString());
...

谢谢:lol
回复 使用道具 举报
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());

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
陈圳 发表于 2013-4-13 20:55

嗯 谢谢  我一直以为集合的角标是从1开始的  低级错误了  见笑了谢了~
回复 使用道具 举报
李尧 发表于 2013-4-13 20:48
都一样了..我建了个集合测试 声明类型写的是List 你写ArrayList一样..

:victory:谢谢  谢谢 这个破数纠结我一天了 我刚才用了一下  谢谢:lol
回复 使用道具 举报
  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());
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李尧 于 2013-4-13 20:51 编辑
本人已死 发表于 2013-4-13 20:45
我的参数是ArrayList 这样没有关系吗

都一样了..我建了个集合测试 声明类型写的是List 你写ArrayList一样..
回复 使用道具 举报
李尧 发表于 2013-4-13 20:25
改成下面这样应该就好了

我的参数是ArrayList 这样没有关系吗
回复 使用道具 举报
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没搞清楚

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
改成下面这样应该就好了
  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.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

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