首页 > 解决方案 > 为什么我的输出文件向后打印付款信息?

问题描述

为什么我的文本文件向后打印代码?我需要它来打印从上到下递减的贷款余额。我没有包含将调用这些方法的程序,如果我也应该发布它,请告诉我。

另外,如果还有其他任何人可能会看到的差异,请告诉我。谢谢!

           package amortizationpack;

import java.io.*;
import java.util.Scanner;
import java.lang.Math;
import java.text.DecimalFormat;

public class Amortization {
    
    double loanAmount;
    double interestRate;
    double loanBalance;
    double term;
    double payment;
    int loanYears;
    Scanner keyboard = new Scanner(System.in);
    DecimalFormat number = new DecimalFormat("#,##0.00");

    public Amortization(double userLoanAmount, int userLoanYears, double userInterestRate) {
        
        loanAmount = userLoanAmount;
        loanYears = userLoanYears;
        interestRate = userInterestRate;

        calcPayment();
        
} // constructor
    public void calcPayment() {
        term = (Math.pow((1 + interestRate / 12), (loanYears * 12)));
        payment = (loanAmount * (interestRate / 12) * term) / (term - 1);
    } // calcPayment method
    
    public int getNumberOfPayments() {
        return loanYears * 12;
    } // getNumberofPayments
    public void saveReport(String loanFile) throws IOException{
        double monthlyInterest;
        double principal;
        
        File file = new File("LoanReport.txt");
        FileWriter fileWrite = new FileWriter(file);
        PrintWriter outputFile = new PrintWriter(fileWrite);
        outputFile.println("Monthly payment: " + number.format(payment));
        outputFile.println("Month\t\t" + "Interest\t\t" + "Principal\t\t"
                + "Balance");
        outputFile.println("--------------------------------------------"
                + "-------------------");
        
    for (int m = 1; m <= getNumberOfPayments(); m++) {
    
        monthlyInterest = interestRate / 12.0 * loanBalance;
        
        if (m != getNumberOfPayments()) {
            principal = payment - monthlyInterest;
        }
        
        else {
            principal = loanBalance;
            payment = loanBalance + monthlyInterest;
        } // for last payment
        loanBalance = loanBalance - principal;
        outputFile.print(m + "\t\t" 
        + number.format(monthlyInterest) + "\t\t" +  number.format(principal) + "\t\t"
        + number.format(loanBalance) + "\n");
        
    } // for loop for writing data to text file
    outputFile.close();
    System.out.print("File Created");
        
} // saveReport
} // class

标签: javafor-loopfilewriterprintwriter

解决方案


这个答案在评论中,所以我认为我不能将其用作官方答案,归功于 user16320675。

基本上,我没有初始化loanBalance 变量,所以它从零开始迭代为负数,而不是从起始余额开始递减。


推荐阅读