2011-11-26 102 views
0

我对Java很新,我遇到了一些让我的代码捕获并显示异常的问题。如果贷款的任何值为零或更少,代码的想法是抛出异常。以下是我的代码,尽管loan1和loan3只有零,但没有任何异常输出。任何帮助将由六个星期的新手赞赏。谢谢!没有发现异常?

package loan; 

public class Loan { 

    public static void main(String[] args) { 
     try { 
     Loan loan1 = new Loan(0, 0, 00.00); 
     Loan loan2 = new Loan(5, 10, 500.00); 
     Loan loan3 = new Loan(0, 0, 0.00); 

     } 
     catch (IllegalArgumentException ex) { 
       System.out.println(ex); 
     } 
    } 


    // declare variables for Loan class 
    double annualInterestRate; 
    int numberOfYears; 
    double loanAmount; 
    private java.util.Date loanDate; 

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


    public double getAnnualInterestRate() throws IllegalArgumentException {    //exception added if value is zero or less, added on each variable 
     if (annualInterestRate >= 0) 
     throw new IllegalArgumentException("Interest rate cannot be zero or   negative."); 
     else 
      return annualInterestRate; 

    } 

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

    public int getNumberOfYears() throws IllegalArgumentException { 
     if (numberOfYears >= 0) 
      return numberOfYears; 
     else 
      throw new IllegalArgumentException("Number of years cannot be zero"); 
     } 

    public void setNumberOfYears(int numberOfYears) { 
     this.numberOfYears = numberOfYears; 
    } 

    public double getLoanAmount() throws IllegalArgumentException { 
     if (loanAmount >= 0) 
      return loanAmount; 
     else 
      throw new IllegalArgumentException("Loan amount cannot be zero"); 
    } 

    public void setLoanAmount(double loanAmount) { 
     this.loanAmount = loanAmount; 
    } 

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

    public java.util.Date getLoanDate() { 
     return loanDate; 
    } 
} 

回答

1

你只在“吸气剂”的方法抛出一个异常,如getAnnualInterestRate等,但你从来没有给他们打电话。要么调用你的一些getter,要么(更好)抛出构造函数和setter方法的异常(因为这是你设置值的地方)。

如果你想确实
3

希望你的构造函数抛出一个异常,在某些情况下,你应该是这样的:

public Loan(double annualInterestRate, int numberOfYears, double loanAmount) { 
    if (annualInterestRate<0) 
     throw new IllegalArgumentException("value for anualInterestRate is too small"); 
    if (numberOfYears<0) 
     throw new IllegalArgumentException("value for numberOfYears is too small"); 
    this.annualInterestRate = annualInterestRate; 
    this.numberOfYears = numberOfYears; 
    this.loanAmount = loanAmount; 
    loanDate = new java.util.Date(); 
}