排序时arraylist索引超出范围

时间:2019-07-02 20:12:01

标签: java arrays

我正在尝试根据列表中单词的长度对数组列表中的元素进行排序。所以最短到最长。 使用下面的代码,由于某种原因它不会被排序。

问题- 我的实现中的错误在哪里?

public static void sort(ArrayList<String> list) {
        for(int i = 0; i <  list.size(); i++) {
            String e1 = list.get(i);
            for(int j = i; j < list.size(); j++) {
                String e2 = list.get(j);
                if( e1.length() > e2.length()) {
                    String tmp = e1;
                    e1 = e2;
                    e2 = tmp;
                }
            }
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
          }
    } 

编辑:

public static void sort(ArrayList<String> list) {
    for(int i = 0; i <  list.size(); i++) {
        String e1 = list.get(i);
        for(int j = i; j < list.size(); j++) {
            String e2 = list.get(j);
            if( e1.length() > e2.length()) {
                String tmp = e1;
                e1 = e2;
                e2 = tmp;
                list.set(j, e1);
                list.set(i, e2);

            }
        }
    }
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
      }
}

3 个答案:

答案 0 :(得分:0)

在第二个for循环中,将条件更改为

for(int j = i; j < list.size(); j++)

答案 1 :(得分:0)

在内循环的最后一遍,它将超出范围。这样考虑一下,在外循环的最后一遍应该停止的地方,再进行一次内循环。

它也不会对列表进行排序,因为要比较的字符串不在列表中。

答案 2 :(得分:0)

删除交换字符串值的部分:

enter image description here

您已经在交换索引。我尝试了没有这一部分的代码,它似乎可以正常工作。尝试删除此部分,让我知道结果。