有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (3) 个答案

  1. # 1 楼答案

    改变

    if (names[j].compareTo(names[j - 1]) > 0) { 
    

    if (names[j] != null && names[j].compareTo(names[j - 1]) > 0) {
    

    恼人的空指针异常将消失

    如果你已经克服了500字符串数组的困扰,我建议你试试TreeSet,因为它可以帮你完成所有的排序工作

    Cheat Sheet

    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]

  2. # 2 楼答案

    你的names数组有500个元素,其中大部分为空。这就是为什么在调用names[j].compareTo()获取空引用时,会得到NullPointerException

    您应该只尝试对输入的名称进行排序

    而不是

    int namesLength = names.length;
    

    试一试

    int namesLength = count;
    

    因为count保存了您实际拥有的输入数量

    顺便说一句,sort()方法还有其他问题:

    1. 循环应该从0到namesLength-1,因此条件应该是j < namesLength
    2. ^当j==0时,{}会给你ArrayIndexOutOfBoundsException
  3. # 3 楼答案

    数组的大小为500,编号为6

    将六个名称分配给数组的前六个索引时,其余索引仍具有null值。因此,与空值比较将抛出NullPointerException

    为什么

    因为Java中的对象在第一次定义时是通过null值初始化的

    建议

    试着使用ArrayList,它会自动收缩和膨胀