[英]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.