为什么我在ArrayList中写buble sort时出错?

时间:2016-01-13 12:26:06

标签: android arraylist quicksort

我有一些带有一些单词的ArrayList。 我需要通过重复来对词语进行排序。感谢。

ArrayList<String> words = new ArrayList<String>();
            words.addAll(Arrays.asList("returns", "such", "containing", "created", "maintain", "such", "discipline", "specified", "these", "such", "which", "such", "larger",
                    "deceptively", "difficult", "returns", "element", "care", "returns", "collection"));
        int i = 0, j = 0;
        String sortTemp;
        for (j = 0; j < words.size(); j++) {
            for (i = 0; i < words.size()-j; i++) {
                if (words.get(i).compareTo(words.get(i+1))>0) {
                    sortTemp = words.get(i);
                    words.set(i, words.get(i+1));
                    words.set(i+1, sortTemp);
                }
            }
        }
        for(i=0;i<words.size(); i++) {
            Log.e("Sorted Array", words.get(i));
        }
  

01-13 06:09:31.065 740-740 /? E / AndroidRuntime:致命异常:主要                                                  处理:com.egoriku.task4_02,PID:740                                                  java.lang.RuntimeException:无法启动活动   ComponentInfo {com.egoriku.task4_02 / com.egoriku.task4_02.MainActivity}:   java.lang.IndexOutOfBoundsException:索引20无效,大小为20                                                      在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)                                                      在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)                                                      在android.app.ActivityThread.access $ 800(ActivityThread.java:135)                                                      在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)                                                      在android.os.Handler.dispatchMessage(Handler.java:102)                                                      在android.os.Looper.loop(Looper.java:136)                                                      在android.app.ActivityThread.main(ActivityThread.java:5001)                                                      at java.lang.reflect.Method.invokeNative(Native Method)                                                      在java.lang.reflect.Method.invoke(Method.java:515)                                                      在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)                                                      在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)                                                      at dalvik.system.NativeStart.main(Native Method)                                                   引起:java.lang.IndexOutOfBoundsException:索引20无效,大小为20                                                      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)                                                      at java.util.ArrayList.get(ArrayList.java:308)                                                      at com.egoriku.task4_02.WorkWithArrayList.TaskThreeSortArrayList(MainActivity.java:51)                                                      at com.egoriku.task4_02.MainActivity.onCreate(MainActivity.java:89)                                                      在android.app.Activity.performCreate(Activity.java:5231)                                                      在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)                                                      在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)                                                      在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)                                                      在android.app.ActivityThread.access $ 800(ActivityThread.java:135)                                                      在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)                                                      在android.os.Handler.dispatchMessage(Handler.java:102)                                                      在android.os.Looper.loop(Looper.java:136)                                                      在android.app.ActivityThread.main(ActivityThread.java:5001)                                                      at java.lang.reflect.Method.invokeNative(Native Method)                                                      在java.lang.reflect.Method.invoke(Method.java:515)                                                      在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)                                                      在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)                                                      在dalvik.system.NativeStart.main(本地方法)

2 个答案:

答案 0 :(得分:0)

无需实施冒泡排序。您只需使用sort方法

即可
ArrayList<String> words = new ArrayList<String>();
words.addAll(Arrays.asList("returns", "such", "containing", "created", "maintain", "such", "discipline", "specified", "these", "such", "which", "such", "larger",
                "deceptively", "difficult", "returns", "element", "care", "returns", "collection"));
Collections.sort(words):

在此代码片段之后,您的ArrayList将被排序

至于你得到的错误,你可以清楚地看到它是一个IndexOutOfBounds Exception,这意味着你的arraylist元素的索引大于它的大小

for(int i = 0; i < words.size(); i++) {
    for(int j = 0; j < words.size()-i-1; j++) { // you make the size smaller here
        if(words.get(j).compareTo(words.get(j+1)) > 0) {
            //....
        }
    }
}

答案 1 :(得分:0)

试试这个,

 ArrayList<String> words = new ArrayList<String>();
        words.addAll(Arrays.asList("returns", "such", "containing", "created", "maintain", "such", "discipline", "specified", "these", "such", "which", "such", "larger",
                "deceptively", "difficult", "returns", "element", "care", "returns", "collection"));
        String tempString;
        for(int i = 0; i < words.size(); i++) {
            for(int j = 0; j < words.size() - 1 -i; j++) {
                if(words.get(j).compareTo(words.get(j+1)) > 0) {
                    tempString = words.get(j);
                    words.set(j,words.get(j+1));
                    words.set(j+1,tempString);
                }
            }
        }

        for (int index = 0 ; index < words.size(); index ++){
            Log.d("MainActivity","element @ "+index+" : "+words.get(index));
        }