繁体   English   中英

如何解决此空指针异常?

[英]How can I fix this null pointer exception?

我不断收到nullPointerException ,其余代码将无法运行。 我有两个课程设置。 一个是SalesPerson ,另一个是main方法。 第42行已标记,这就是nullPointerException发生的位置。

这是第42行

System.out.printf("%-20s %15.2f %14.2f %n", list[i].getFirstName()  + " " + list[i].getLastName(), list[i].getTotalSales(), list[i].getSalary());





public class SalesPerson {
    private String firstName;
    private String lastName;
    private double firstSales;
    private double secondSales;
    private double thirdSales;
    private double fourthSales;
    private double totalSales;
    private double salary;

    public SalesPerson(String lastName, String firstName, double firstSales,
            double secondSales, double thirdSales, double fourthSales,
            double totalSales, double salary) {

        this.lastName = lastName;
        this.firstName = firstName;
        this.firstSales = firstSales;
        this.secondSales = secondSales;
        this.thirdSales = thirdSales;
        this.fourthSales = fourthSales;
        this.totalSales = totalSales;
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public double getTotalSales() {
        return totalSales;
    }

    public void setTotalSales(double totalSales) {
        this.totalSales = totalSales;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public double getFirstSales() {
        return firstSales;
    }

    public void setFirstSales(double firstSales) {

        if (firstSales >= 0) {
            this.firstSales = firstSales;
        } else {
            System.out.println("First sales must be greater than zero.");
        }
    }

    public double getSecondSales() {
        return secondSales;
    }

    public void setSecondSales(double secondSales) {
        if (secondSales >= 0) {
            this.secondSales = secondSales;
        } else {
            System.out.println("Second sales must be greater than zero.");
        }
    }

    public double getThirdSales() {
        return thirdSales;
    }

    public void setThirdSales(double thirdSales) {
        if (thirdSales >= 0) {
            this.thirdSales = thirdSales;
        } else {
            System.out.println("Third sales must be greater than zero.");
        }
    }

    public double getFourthSales() {
        return fourthSales;
    }

    public void setFourthSales(double fourthSales) {
        if (fourthSales >= 0) {
            this.fourthSales = fourthSales;
        } else {
            System.out.println("Fourth sales must be greater than zero.");
        }
    }

}

第二课

import java.io.File;
import java.util.Scanner;

    public class Assignment10 {
        public static final int NUM_SALESPEOPLE = 20;
        public static final double NUM_PER_SALARY = 25;
        public static void main(String[] args) {

            SalesPerson[] list = new SalesPerson[NUM_SALESPEOPLE];

            try {
                int people = 0;
                Scanner fileInput = new Scanner(new File("A10.txt"));

                while (fileInput.hasNext()) {
                    String lastName = fileInput.next();
                    String firstName = fileInput.next();
                    double firstSales = fileInput.nextDouble();
                    double secondSales = fileInput.nextDouble();
                    double thirdSales = fileInput.nextDouble();
                    double fourthSales = fileInput.nextDouble();
                    double totalSales = firstSales + secondSales + thirdSales + fourthSales;
                    double salary = NUM_PER_SALARY * totalSales;
                    SalesPerson person = new SalesPerson(lastName, firstName,
                            firstSales, secondSales, thirdSales, fourthSales, totalSales, salary);
                    list[people] = person;
                    people++;

                }
            } catch (Exception ex) {
                System.out.println("Error opening file.");
            }

            System.out.println("Full Name                Total Sales         Salary");
            System.out.println("=========                ===========         ======");
            for (int i = 0; i < NUM_SALESPEOPLE; i++) {
                System.out.printf("%-20s %15.2f %14.2f %n",      list[i].getFirstName()  + " " + list[i].getLastName(), list[i].getTotalSales(), list[i].getSalary());
            }
            System.out.println("===================================================");


        }

    }

您正在创建一个大小为20的数组。该数组将仅包含对NULL的引用。 如果文件中的条目少于20个,则将以nullpointerexception结尾。

可以肯定的是,尝试打印人的价值。 如果小于20,则为正常现象。

您的文件“ A10.txt”没有20(正确)行。

您不应该创建一个数组。 改用ArrayListIterator ,您将不会遇到此类问题。

只需添加一个null检查:

for (int i = 0; i < NUM_SALESPEOPLE; i++) {
    if (list[i] != null) {
        System.out.printf("%-20s %15.2f %14.2f %n",      list[i].getFirstName()  + " " + list[i].getLastName(), list[i].getTotalSales(), list[i].getSalary());
    }
}

或声明

int people = 0;

前两行(在try块之前),并使用此实际读取人数作为for循环的上限,而不是NUM_SALESPEOPLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM