简体   繁体   English

为什么在 ArrayList 中写入冒泡排序时出错?

[英]Why i have error when write buble sort in ArrayList?

I have ArrayList with some words.我有带一些词的 ArrayList。 I need to sort words by way of repetition.我需要通过重复的方式对单词进行排序。 Thanks.谢谢。

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/? 01-13 06:09:31.065 740-740/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.egoriku.task4_02, PID: 740 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.egoriku.task4_02/com.egoriku.task4_02.MainActivity}: java.lang.IndexOutOfBoundsException: Invalid index 20, size is 20 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.Nativ E/AndroidRuntime:致命异常:主进程:com.egoriku.task4_02,PID:740 java.lang.RuntimeException:无法启动活动组件信息{com.egoriku.task4_02/com.egoriku.task4_02.MainActivity}:java.lang. IndexOutOfBoundsException: Invalid index 20, size is 20 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at 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) 在 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) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.Nativ eStart.main(Native Method) Caused by: java.lang.IndexOutOfBoundsException: Invalid index 20, size is 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) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Met eStart.main(Native Method) 由:java.lang.IndexOutOfBoundsException: Invalid index 20, size is 20 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java) :308) 在 com.egoriku.task4_02.WorkWithArrayList.TaskThreeSortArrayList(MainActivity.java:51) 在 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) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os。 Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Met hod.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) hod.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)

There is no need to implement bubble-sort.不需要实现冒泡排序。 You can just use the sort method你可以只使用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):

After this code fragment your ArrayList will be sorted在此代码片段之后,您的 ArrayList 将被排序

As for the error you are getting, you can clearly see that it is an IndexOutOfBounds Exception, which means the index of your arraylist elements is greater than it's size至于你得到的错误,你可以清楚地看到它是一个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) {
            //....
        }
    }
}

Try this,尝试这个,

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么在尝试写入数据库时​​出现此错误? - Why am I getting this error when attempting to write to a database? 为什么当我编写ItemListView时会出现错误? - Why when i write ItemListView it gives me error? 为什么我会出现这个错误? - Why have I this error? 使用ArrayList的ArrayList时读写宗地 - Read and write Parcel when using ArrayList of ArrayList 为什么当我尝试在 Firebase 数据库中写入时出现此错误? 与 FirebaseApp$IdTokenListener 相关 - Why when i´m trying to write in Firebase Database I got this error? Related with FirebaseApp$IdTokenListener 为什么可空的 ArrayList 在将不可空的 ArrayList 传递给它时会出现类型不匹配错误? - Why does a nullable ArrayList give a Type Mismatch error when passing it a non-nullable ArrayList? 如何对自定义对象的ArrayList排序? - How can I sort an ArrayList of custom objects? 我如何排序arraylist hasmap - How can I sort arraylist hasmap 为什么我在布局中放置按钮、图像等时出现同样的错误 - why i have the same error when i put button ,image,etc in the layout 当我尝试使用Guice覆盖通用绑定时,为什么会出现错误? (TypeLiteral) - Why do I have an error when I try to override a generic binding with Guice? (TypeLiteral)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM