java按字母顺序排序
我正在尝试按字母顺序对名称列表进行排序,并且在线程“main”java中不断出现错误异常。我不知道为什么
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class alphabeticalOrder {
static String names[];
static int count = 0;
static String sorting;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String[] names = new String[500];
File namesFile = new File("names.txt");
Scanner inputFile = new Scanner(namesFile);
while (inputFile.hasNextLine()) {
String line = inputFile.nextLine();
String[] namesDetails = line.split(" ");
names[count] = namesDetails[0];
count++;
}
sort();
System.out.println(Arrays.toString(names));
}
public static void sort() {
int namesLength = names.length;
for (int i = 0; i < namesLength - 1; i++) {
for (int j = 0; j < namesLength - 1; j++) {
if (names[j].compareTo(names[j - 1]) > 0) {
sorting = names[j - 1];
names[j - 1] = names[j];
names[j] = sorting;
}
}
}
}
}
客户有这些名字
Smith, Alexandra
Downes, Trish
Akbal, Maria
数组必须等于500
# 1 楼答案
改变
到
恼人的空指针异常将消失
如果你已经克服了500字符串数组的困扰,我建议你试试TreeSet,因为它可以帮你完成所有的排序工作
输出:[A、M、Z]
# 2 楼答案
你的
names
数组有500个元素,其中大部分为空。这就是为什么在调用names[j].compareTo()
获取空引用时,会得到NullPointerException
您应该只尝试对输入的名称进行排序
而不是
试一试
因为
count
保存了您实际拥有的输入数量顺便说一句,sort()方法还有其他问题:
j < namesLength
ArrayIndexOutOfBoundsException
# 3 楼答案
数组的大小为
500
,编号为6
将六个名称分配给数组的前六个索引时,其余索引仍具有
null
值。因此,与空值比较将抛出NullPointerException
为什么
因为Java中的对象在第一次定义时是通过
null
值初始化的建议:
试着使用
ArrayList
,它会自动收缩和膨胀