簡體   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