[当尝试对我的对象数组进行排序时,我得到空对象和NullPointerException

问题描述 投票:0回答:1

我坚持为什么我的代码不对对象数组进行排序,并给我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;

 }
 }
java arrays object
1个回答
0
投票

尝试使用此代码段,并确保您的数组项已填充:

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.