2013-11-28 3 views
0

Решение: Добавить loanDate = new java.util.Date(); классу contructor.Решено: Java NullPointerException с классом в заявлении Printf

Точка исключение показывает на линии 27

Снимок экрана CMD распечатки (Заявление PRINTF в нижней части.): http://imgur.com/u7fiMR2

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()); 
} 
} 

Я не уверен, что это ссылка. Ниже приведен класс, если он вам нужен. Заранее спасибо.

класс займа:

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; 
} 
} 
+0

Показать класс 'Loan'. –

+0

Вы должны показать нам класс 'Loan', определенно. Я предполагаю, что ваш конструктор фактически не устанавливает все. Также обратите внимание, что вы не должны использовать 'double' для финансовых значений - используйте' BigDecimal' или целое число центов/пенни/что угодно. –

+2

loan.getLoanDate(), вероятно, возвращает null. – BevynQ

ответ

2

Вы никогда не инициализировать 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(); 
} 

Также ваши сеттеры бесполезны.

Они должны быть (вы можете добавить некоторые проверки):

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

И так далее.

+0

>. <Полностью пропустил инициализацию, и спасибо за указание мутаторов, это напоминает мне, почему я всегда делаю то или другое первым, а не вперед и назад. :) – Ethan

0

Loan.loanDate не инициализирован или не назначен.

Смежные вопросы