第 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/