排序时arraylist索引越界

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


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


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));

      }

}


拉风的咖菲猫
浏览 121回答 3
3回答

至尊宝的传说

在内循环的最后一遍,它会出界。这样想,在它应该停止的外循环的最后一次传递中,您对内循环进行了额外的传递。它也不会对您的列表进行排序,因为您正在比较的字符串不在您的列表中。

人到中年有点甜

删除交换字符串值的部分:您已经在交换索引。我尝试了没有这部分的代码,它似乎有效。尝试删除此部分并让我知道结果。

斯蒂芬大帝

在第二个 for 循环中,将条件更改为for(int&nbsp;j&nbsp;=&nbsp;i;&nbsp;j&nbsp;<&nbsp;list.size();&nbsp;j++)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java