我坚持为什么我的代码不对对象数组进行排序,并给我NullPointerException,但我不太确定我的错误在哪里。
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:202)
at java.base/java.util.Arrays.sort(Arrays.java:1250)
at Program7b.sortCust(Program7b.java:63)
at Program7b.main(Program7b.java:16)
我调用其他方法的主要方法和myPrintFile方法读取并输入文件并将对象存储在客户数组中
public static void main(String[] args) throws IOException {
File k = new File("program7b.txt");
Scanner in = new Scanner(k);
Customer[] obj1 = new Customer[in.nextInt()];
printFile(obj1);
sortCust(obj1);
}
public static void printFile(Customer [] obj) throws IOException {
File f = new File("program7b.txt");
Scanner in = new Scanner(f);
int count = 0;
obj = new Customer[in.nextInt()];
while (in.hasNext()) {
int id = in.nextInt();
String name = in.next();
String email = in.next();
double balance = in.nextDouble();
if (in.hasNextDouble()) {
double tax = in.nextDouble();
double afterT = tax * balance;
obj[count] = new NonExempt(id, name, email, balance, tax, afterT);
}
else if (in.hasNext()) {
String why = in.next();
obj[count] = new TaxExempt(id, name, email, balance, why);
}
in.nextLine();
count++;
}
in.close();
// looping throught the array and printing every customer object
for (int i = 0; i < count; i++) {
System.out.println(obj[i]);
// System.out.println("Tax Type: " + ((TaxExempt)obj[i]).getExempt());
}
//return obj;
}
我的排序方法
public static void sortCust(Customer [] obj) {
for (int i = 0; i < obj.length; i++)
System.out.println(obj[i]);
Arrays.sort(obj);
for(int i = 0; i < obj.length; i++)
System.out.println(obj[i]);
}
我的compareTo方法
@Override
public int compareTo(Customer a){
if(this.getId < a.getId())
return -1;
if(this.getId == a.getId())
return 0;
else return 1;
}
}
尝试使用此代码段,并确保您的数组项已填充:
import java.util.Arrays;
import java.util.*;
import java.lang.*;
import java.io.*;
public class Main
{
public static void main(String[] args) {
User[] users = {new User(2, "user2"), new User(1, "user1"), new User(3, "user3")};
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
System.out.println(users[i].getUsername());
}
}
}
class User implements Comparable<User> {
private int id;
private String username;
public String getUsername() {
return username;
}
public int getId() {
return id;
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
@Override
public int compareTo(User user) {
if(id < user.getId())
return -1;
if(id == user.getId())
return 0;
else return 1;
}
}