java - 尝试对对象数组进行排序时出现 NullPointerException
问题描述
我被困在为什么我的代码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
方法读取和输入文件并将对象存储在数组中Customers
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;
}
修改后的代码我修复了我的调用方式printFile()
Customer[] obj = printFile();
sortCust(obj);
}
public static Customer[] printFile() throws IOException {
File f = new File("program7b.txt");
Scanner in = new Scanner(f);
int count = 0;
Customer[] 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]);
}
return obj;
解决方案
试试这个片段并确保你的数组项被填充:
*** 如果您确定您的数组中填充了值,则这适用于数组。
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;
}
}
*** 使用扫描仪试试这个片段:
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
public class Main
{
public static void main(String[] args) {
File k = new File("program7b.txt");
try {
Scanner scanner = new Scanner(k);
ArrayList<User> users = new ArrayList<User>();
while (scanner.hasNext()) {
int id = Integer.parseInt(scanner.next());
users.add(new User(id));
}
System.out.println("Unsorted: ");
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i).getId());
}
Collections.sort(users);
System.out.println("Sorted: ");
for (int i = 0; i < users.size(); i++) {
System.out.println(users.get(i).getId());
}
scanner.close();
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
}
class User implements Comparable<User> {
private int id;
public int getId() {
return id;
}
public User(int id) {
this.id = id;
}
@Override
public int compareTo(User user) {
if(id < user.getId())
return -1;
if(id == user.getId())
return 0;
else return 1;
}
@Override
public String toString() {
return "user id: " + id;
}
}
推荐阅读
- javascript - Angular 2 -POST 401 未经授权
- node.js - 无法从 Angular 的 https 服务器调用 http api
- mysql - 使用 express-mysql-session 进行验证
- java - 将动态地图转换为列表?
- python - 你如何找到python中字典值的百分位数
- python-3.x - 如何从文本文件中提取特定内容
- javascript - 当 window.scroll 事件由用户触发或由事件执行的代码触发时识别它
- r - 在箱线图中比较均值时显示“p = 0.1”
- r - 为 LMM 模型中的单个对比计算 AIC/BIC
- ruby-on-rails - 火鸟数据库的活动记录中的布尔字段问题