【问题标题】:Cannot properly sort through my arraylist无法正确排序我的数组列表
【发布时间】:2016-01-11 22:02:25
【问题描述】:

所以我正在尝试按升序(按区域)对几何对象的数组列表进行排序。但是,我遇到了一个错误

The method add(GeometricObject) in the type ArrayList<GeometricObject> is not applicable for the arguments (double)

在我的代码块中

private static void selectionSort(ArrayList<GeometricObject> list) {
        for (int i = 0; i < list.size(); i++) {
            if (i < list.size() - 1) {
                if (list.get(i).getArea() > list.get(i + 1).getArea()) {
                    double j = list.get(i).getArea();
                    list.remove(i);
                    list.add(i, list.get(i));
                    list.remove(i + 1);
                    list.add(j).getArea();
                    i = -1;
                }
            }
        }

     }

list.add(j).getArea();

再次,我只是想按区域的顺序对它们进行排序,以便稍后打印数组。任何正确方向的帮助或指示将不胜感激,谢谢!

【问题讨论】:

  • 为什么要将double 添加到ArrayList&lt;GeometricObject&gt;
  • 这些行的目的到底是什么:list.add(i, list.get(i));list.add(j).getArea();?对我来说没有多大意义
  • 啊,我什至没有发现自己facepalm。我想我可能已经通过将 j 设置为 GeometricObject 并删除 getArea 方法并对 list.add(j) 行执行相同的操作来解决该错误。 @SotiriosDelimanolis
  • 对我来说也没有什么意义,哈哈,我以为我只是在交换区域,而实际上我应该交换整个对象列表顺序。 @保罗
  • 为什么不想使用标准的 java Collections.sort 和 Comparator 进行排序?

标签: java sorting object arraylist


【解决方案1】:

我想你想这样做

private static void selectionSort(ArrayList<GeometricObject> list) {
        for (int i = 0; i < list.size(); i++) {
            if (i < list.size() - 1) {
                if (list.get(i).getArea() > list.get(i + 1).getArea()) {
                    GeometricObject j = list.get(i);
                    list.remove(i);
                    list.add(i, list.get(i));
                    list.remove(i + 1);
                    list.add(j);
                    i = -1;
                }
            }
        }

     }

我会考虑将j 更改为更有意义的名称。由于数据类型无法比较而发生此问题

【讨论】:

  • 这正是我的目标。谢谢!
  • @RiFFRAFF 您可以使用 Collections.Sort() 方法使用几何对象对 ArrayList 进行排序,而不是自己编码选择排序和合并排序。我已经在这里发布了! stackoverflow.com/questions/33116198/…
【解决方案2】:

试试这个:

    Collections.sort(list, new Comparator<GeometricObject>() {
        @Override
        public int compare(GeometricObject o1, GeometricObject o2) {
            if (o1.getGmtModified() != null && o2.getGmtModified() != null){
                if(o1. getArea() < o2. getArea()) {
                    return 1;
                }else if(o1. getArea() > o2. getArea()){
                    return -1;
                }else{
                    return 0;                        
                }
            }
            return 0;
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2021-07-28
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多