【问题标题】:Why does my sort method fail to sort some charachter?为什么我的排序方法无法对某些字符进行排序?
【发布时间】:2017-02-27 13:32:21
【问题描述】:

所以,这是我的代码:

public ArrayList<Actor> SortArray(ArrayList<Actor> actorsArrayList){
    if (actorsArrayList.size()==2){
        if (actorsArrayList.get(0).getName().compareTo(actorsArrayList.get(1).getName())>0){
            Actor tmpActor = actorsArrayList.get(0);
            actorsArrayList.set(0, actorsArrayList.get(1));
            actorsArrayList.set(1, tmpActor);
        }
    }if (actorsArrayList.size()>2){
        ArrayList<Actor> part1 = new ArrayList<Actor>    (actorsArrayList.subList(0, actorsArrayList.size()/2));
        ArrayList<Actor> part2 = new ArrayList<Actor>    (actorsArrayList.subList(actorsArrayList.size()/2, actorsArrayList.size()));
        SortArray(part1);
        SortArray(part2);
        actorsArrayList = MergeArrays(part1,part2);
    }
    return actorsArrayList;
}

public ArrayList<Actor> MergeArrays(ArrayList<Actor> part1, ArrayList<Actor> part2){
    ArrayList<Actor> mergedArray = new ArrayList<Actor>();
    int i = 0;
    int j = 0;
    while (i<part1.size() && j<part2.size()){
        if (part1.get(i).getName().compareTo(part2.get(j).getName())<0){
            mergedArray.add(part1.get(i));
            i=i+1;
        }else if (part1.get(i).getName().compareTo(part2.get(j).getName())>0){
            mergedArray.add(part2.get(j));
            j=j+1;
        }
    }

    while (i<part1.size()){
        mergedArray.add(part1.get(i));
        i=i+1;
    }
    while (j<part2.size()){
        mergedArray.add(part2.get(j));
        j=j+1;
    }
    return mergedArray;
}

此代码旨在与巨大的 ActorsArrayList 一起使用,通过使用我自己的 MergeSort 方法按字母顺序对其进行排序(Actor 类包含参数 Name,这是我用来对数组进行排序的字符串)。我目前正在尝试使此方法与包含 [d,a,b,l,z,x,y,c,w] 的非常简单的数组一起使用。它可以正常工作,但“l”总是到最后,无论起始顺序是什么。如果我用真正的演员 arrayList(包含真实姓名)尝试它,它并没有真正对任何东西进行排序。

非常感谢您的帮助:)

编辑 1:澄清代码。对于某些评论它的人,我也不需要我想要排序的数组大小为 0 的情况。

编辑 2:永远不会有 2 个演员同名,因为他们会在我的程序的前一阶段合并。

【问题讨论】:

  • 我建议你用驼峰式命名变量。全部大写会使代码难以阅读。
  • tldr;在调试器中逐步完成。并且在发布代码时请遵守 Java 命名约定。真是让人眼花缭乱。
  • 你至少错过了 compareTo == 0 的情况
  • 有什么理由不使用Collections.sort
  • 作为调试提示,将您的测试用例减少到尽可能短的列表,但仍会重现错误

标签: java string sorting arraylist mergesort


【解决方案1】:

问题在于SortArray()actorsArrayList.size()&gt;2 情况。您正在将每个部分排序到新的ArrayLists 中,但忘记在对MergeArrays() 的调用中使用排序列表。像这样修复:

        part1 = SortArray(part1);
        part2 = SortArray(part2);

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多