我有一些带有一些单词的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(本地方法)
答案 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));
}