Printf 语句中带有类的 Java NullPointerException

标签 java class nullpointerexception

第 27 行显示了点异常(底部的 printf 语句。)

cmd打印输出的屏幕截图:/image/zvndw.jpg

import java.util.Scanner;

public class TestLoanClass {
// Main method
public static void main(String[] args) {
    // Create a scanner
    Scanner input = new Scanner(System.in);
    
    // Enter annual interest rate
    System.out.print(
        "Enter annual interest rate, for example, 8.25: ");
    double annualInterestRate = input.nextDouble();
    
    // Enter number of years
    System.out.print("Enter number of years as an integer: ");
    int numberOfYears = input.nextInt();
    
    // Enter loan amount
    System.out.print("Enter loan amount, for example, 120000.95: ");
    double loanAmount = input.nextDouble();
    
    // Create loan object
    Loan loan =
        new Loan(annualInterestRate, numberOfYears, loanAmount);
        
    // Display loan date, monthly payment, and total payment
    System.out.printf("The loan was created on %s\n" +
        "The monthly payment is %.2f\nThe total payment is %.2f\n",
        loan.getLoanDate().toString(), loan.getMonthlyPayment(),
        loan.getTotalPayment());
}
}

我不确定它引用的是什么。如果您需要的话,下面是该类(class)。提前致谢。

贷款类别:

public class Loan {
private double annualInterestRate;
private int numberOfYears;
private double loanAmount;
private java.util.Date loanDate;

// Default constructor
public Loan() {
    this(2.4,1,1000);
}

/* Construct a loan with specified annual interest rate,
number of years, and loan amount. */
public Loan(double annualInterestRate, int numberOfYears,
    double loanAmount) {
    this.annualInterestRate = annualInterestRate;
    this.numberOfYears = numberOfYears;
    this.loanAmount = loanAmount;
}

// Return annualInterestRate
public double getAnnualInterestRate() {
    return annualInterestRate;
}

// Set a new annualInterestRate
public void setAnnualInterestRate() {
    this.annualInterestRate = annualInterestRate;
}

// Return numberOfYears
public int getNumberOfYears() {
    return numberOfYears;
}

// Set a new numberOfYears
public void setNumberfOfYears() {
    this.numberOfYears = numberOfYears;
}

// Return loanAmount
public double getLoanAmount() {
    return loanAmount;
}

// Set a new loanAmount
public void setLoanAmount() {
    this.loanAmount = loanAmount;
}

// Find monthly payment
public double getMonthlyPayment() {
    double monthlyInterestRate = annualInterestRate / 1200;
    double monthlyPayment = loanAmount * monthlyInterestRate / (1 -
        (1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12)));
    return monthlyPayment;
}

// Find total payment
public double getTotalPayment() {
    double totalPayment = getMonthlyPayment() * numberOfYears * 12;
    return totalPayment;
}

// Return loan date
public java.util.Date getLoanDate() {
    return loanDate;
}
}
<小时/>

解决方案

loanDate = new java.util.Date(); 添加到类构造函数中。

最佳答案

你永远不会初始化loanDate,因此在执行loan.getLoanDate().toString()时,它会抛出一个NPE。

在构造函数中初始化它:

public Loan(double annualInterestRate, int numberOfYears,
    double loanAmount) {
    this.annualInterestRate = annualInterestRate;
    this.numberOfYears = numberOfYears;
    this.loanAmount = loanAmount;
    this.loanDate = new Date();
}

而且你的 setter 也没用。

它们应该是(您可以添加一些检查):

public void setAnnualInterestRate(double annualInterestRate) {
    this.annualInterestRate = annualInterestRate;
}

等等。

关于Printf 语句中带有类的 Java NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274640/

相关文章:

c++ - 在 B 类中使用 A 类类型的 vector

java - Environment.getExternalStorageDirectory() 返回 null

java - 将图像 blob 插入 MySQL - NullPointerException

java - 更改 volatile 字段是否会更新对象?

java - POJO 类中 "is"变量 getter/setter 的正确语法是什么?

python - 尝试在其自己的类变量部分中使用类的名称时出现问题

android - 仪器测试 - setContentView() 上的空指针异常

java - 修改单个玩家的消息

java - 如何从 Esper EPL 中的查询中检索多列并对其进行分组?

C++:从子类访问父类