java按字母顺序排序[重复]
Posted
技术标签:
【中文标题】java按字母顺序排序[重复]【英文标题】:java sorting in alphabetical order [duplicate] 【发布时间】:2014-12-21 15:37:28 【问题描述】:我正在尝试按字母顺序对名称列表进行排序,但在线程“main”java.lang.NullPointerException 中不断收到错误异常,我不知道为什么。
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;
Customers txt 有这些名字
Smith, Alexandra
Downes, Trish
Akbal, Maria
并且数组必须等于 500
【问题讨论】:
【参考方案1】:改变
if (names[j].compareTo(names[j - 1]) > 0)
到
if (names[j] != null && names[j].compareTo(names[j - 1]) > 0)
而烦人的空指针异常就会消失。
如果你对 500 个字符串数组的痴迷,我建议你试试 TreeSet,因为它会为你完成所有的排序工作。
public static void main(String[] args)
Set<String> alphabetical = new TreeSet<String>();
alphabetical.add("A");
alphabetical.add("Z");
alphabetical.add("M");
System.out.println(alphabetical);
输出:[A, M, Z]
【讨论】:
两种方法都试了,还是报错 究竟在哪一行? if (names[j] != null && names[j].compareTo(names[j - 1]) > 0) 这和我有方法的主要方法中的排序部分排序() 如果你还没有像这个人一样忘记编译:***.com/questions/1816776/… 然后执行 System.out.println(names[j] + " 我正在这样做,但我仍然收到错误,我不知道为什么,因为它看起来正确但无法编译【参考方案2】:您的 names
数组有 500 个元素,其中大部分为空。这就是为什么当您调用names[j].compareTo()
以获得空引用时,您会得到NullPointerException
。
您应该只尝试对输入的名称进行排序。
代替
int namesLength = names.length;
试试
int namesLength = count;
因为count
包含您实际拥有的输入数量。
顺便说一句,您的 sort() 方法还有其他问题:
-
循环应该从 0 到 namesLength - 1,所以条件应该是
j < namesLength
当 j==0 时,names [j-1]
会给你ArrayIndexOutOfBoundsException
【讨论】:
【参考方案3】:数组大小为500
,编号为6
。
当您为数组的前六个索引分配六个名称时,其余索引仍然具有null
值。因此,与空值比较会抛出NullPointerException
。
为什么?
因为 Java 中的对象在第一次定义时由 null
值初始化。
建议:
尝试使用ArrayList
,它会自行收缩和扩展
【讨论】:
以上是关于java按字母顺序排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章
按字母顺序对 NSMutableArray 进行排序[重复]