我正在尝试将单词插入按字母顺序排序的单词数组中。下面的代码将数组转换为arraylist并将单词插入正确的位置。但是,如果要插入的单词必须在最后,则不会插入。对于最后一个for循环,我尝试将条件设置为< = aList.size()但我得到一个ArrayList.rangeCheck和ArrayList.get异常。任何帮助将不胜感激。
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);
}
}
答案 0 :(得分:2)
使用布尔值记录您是否成功地将单词插入任何其他单词之前,如果没有,则将其添加到数组的末尾:
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);
}
答案 1 :(得分:1)
for循环只会将新单词添加到List中,如果单词在另一个单词之前按字母顺序排列,或者如果它等于列表中的另一个单词。在
的情况下String word = "zzzz";
这确实在另一个或另一个词之前按字母顺序排列,因此不会添加。 您需要添加某种检查以查看是否添加了工作,如果没有,请调用
aList.add(word)
将新单词添加到列表的末尾。