我正在尝试将单词插入字母顺序排序的单词阵列。下面的代码将数组转换为阵列列表,并将单词插入正确的位置。但是,如果要插入的单词必须在最后插入,则不会插入。对于循环的最后一个,我尝试将条件设置为< = alist.size(),但是我得到一个arraylist.rangecheck和arraylist.get exception。任何帮助将不胜感激。
import java.util.*;
public class insertSort {
public static void main(String args []) {
String [] sortedArray = new String [] {"aa", "ball", "dog", "zebra", "zzz"};
ArrayList <String> aList = new ArrayList <String> (); //create new arraylist
for (int i=0; i < sortedArray.length; i++){
String temp = sortedArray [i];
aList.add(temp);
}
System.out.println(aList);
String word = "zzzz";
for (int i =0; i < aList.size();i++) {
String temp = aList.get(i);
int comparisonResult = word.compareTo(temp) ;
if (comparisonResult < 0 | comparisonResult == 0) {
aList.add(i , word);
break;}
}
System.out.println(aList);
}
}
使用布尔值记录您是否成功地将单词插入了其他任何一个,如果没有,请将其添加到数组的末尾:
boolean wasInserted = false;
for (int i =0; i < aList.size();i++) {
String temp = aList.get(i);
int comparisonResult = word.compareTo(temp) ;
if (comparisonResult < 0 || comparisonResult == 0) {
aList.add(i , word);
wasInserted = true;
break;
}
}
if(!wasInserted) {
aList.add(word);
}
如果该单词在另一个单词之前按字母顺序出现,或者是否等于列表中的另一个单词,则FO for循环只会将新单词添加到列表中。如果是
String word = "zzzz";
这确实在另一个或等于另一个单词之前按字母顺序排列,因此不会添加。您需要添加某种检查以查看是否添加了工作,如果没有添加,请致电
aList.add(word)
将新单词添加到列表的末尾。