首先,我会说这是家庭作业,我想帮助而不是直接回答。因为它是家庭作业而不是真正的应用程序,所以我仅限于以下课程:
java.util.ArrayList
java.util.Scanner
对于我的AP计算机科学课程,我创建的程序将通过System.in
接受名称并将其输入ArrayList<String>
,然后按字母顺序对它们进行排序。
我已经完成了所有工作,但我的插入排序似乎只是按名字排序,而不是按字母顺序排列。
以下是我目前的插入排序方法。
public static ArrayList<String> doInsertionSort(ArrayList<String> a) { //helper method that performs an insertion sort upon an ArrayList<String>.
String temp; //temporary string for holding data.
for(int i = 1; i < a.size(); i++) { //One major sweep occurs, with sorting pulses working backwards.
//NOTE:Starts at position 1 of ArrayList<String> so that j-1 doesn't throw OutOfBounds exception.
//Besides, there would be nothing to swap position 0 of ArrayList<String> in this particular inserton sort.
for(int j = i; j > 0; j--) { //starts at position i in ArrayList<String> and works backwards.
if(a.get(j).charAt(0) < a.get(j - 1).charAt(0)) { //if the String at position j is less than the string behind it,
//swap the two. This keeps happening until position 0 is reached.
temp = a.get(j);
a.set(j, a.get(j-1));
a.set(j-1, temp);
}
}
}
return a;
} //end doInsertionSort
我使用以下数据测试了我的排序算法:
z
Mariah
Carrie
cHaRlOtTe
caRl
joSe
johnathan
[Carrie, Charlotte, Carl, Jose, Johnathan, Mariah, Z]
是我的输出,应该是
[Carl, Carrie, Charlotte, Johnathan, Jose, Mariah, Z]
我100%完成了作业(我们从在线java课程“学习”,附带一个方便的花花公子提交来评估源代码)但我对结果不满意,因为我没有设法得到一个完美的字母排序。
我只是不太确定如何告诉java如何按字母顺序排序。
感谢您的帮助。
编辑:很多人都指出String
包含的方法compareTo()
正是我所寻找的,虽然我不确定是谁给出了最佳答案。
答案 0 :(得分:0)
有String.compareTo()
函数按字母顺序比较字符串。
a.compareTo(b)
如果字符串相等则返回0
,如果1
按字母顺序返回a > b
,否则返回-1
。
所以你可以通过使用compartTo比较字符串来删除你的内循环,它循环抛出字符串并比较它们的字符,使用charAt。
答案 1 :(得分:0)
使用compareTo()
方法比较String
。 https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html
您还可以使用Collections.sort(list)
https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html
答案 2 :(得分:0)
我认为您需要查看的代码行是:
if(a.get(j).charAt(0) < a.get(j - 1).charAt(0))
想想这是比较a.get(j)是一个字符串而a.get(j-1)是一个字符串所以最后一部分在做什么?