我正在尝试获取电话簿的JavaFx应用程序,以便按照名字按字母顺序对联系人列表进行排序。但是,现有循环未按正确顺序列出名称。这是排序方法:
public static void sortContactList() {
try {
for (int i = 0; i < contactList.length - 1; i++) {
for (int j = i + 1; i < contactList.length; j++) {
if ((contactList[j].first.toCharArray()[0]) < (contactList[i].first.toCharArray()[0])) {
Entry tmp = contactList[j];
contactList[j] = contactList[i];
contactList[i] = tmp;
}
}
}
} catch (NullPointerException exc) {}
}
下面显示了如何组成联系人列表。它存储在一个文件中,首先是人的名字作为字符串:
class Entry {
public String first, last, number, note;
}
public class Phonebookfor1510 {
public static Entry[] contactList;
public static int num_entries;
public static void main(String args[]) throws Exception {
int i;
char C;
String code, Command;
contactList = new Entry[200];
num_entries = 0;
我的其余代码可以使用它。我只是想知道它为什么不按字母顺序排序值列表。任何帮助将不胜感激!!
答案 0 :(得分:0)
您可以做的最好的事情是使用TreeSet。像给定的例子一样
TreeSet<String> stringSet = new TreeSet<>();
stringSet.add("Mummy");
stringSet.add("Mahima");
stringSet.add("Gaurav");
stringSet.add("Naresh");
stringSet.add("Bhawna");
for(String s : stringSet) {
System.out.println(s);
}
输出 Bhawna 拉夫 Mahima 木乃伊 纳雷什
答案 1 :(得分:0)
我认为第二个for循环永远不会在没有NullPointerException
的情况下结束。您正在增加j
,但会检查i<contactList
。
在这种情况下,您可以使用Arrays.sort()
。
答案 2 :(得分:0)
看看这个示例代码:
public class Entry implements Comparable<Entry>{
private Long id;
private String fullName;
private String phoneNumber;
public int compareTo(Entry other) {
if(other==null) throw new NullPointerException();
/*
-1 : phonenumber of current entry is smaller that other
0 : phonenumber of current entry is equal to other
+1 : phonenumber of current entry is greater than other
*/
return (this.getFullName().compareTo(other.getPhoneNumber()));
}
public static void main(String[] args){
Entry[] entriesArray = getEntriesArrayListFromSomewhere();
Arrays.sort(entriesArray);
}
//getters ans setters
}