java - 为什么我的输出文件向后打印付款信息?
问题描述
为什么我的文本文件向后打印代码?我需要它来打印从上到下递减的贷款余额。我没有包含将调用这些方法的程序,如果我也应该发布它,请告诉我。
另外,如果还有其他任何人可能会看到的差异,请告诉我。谢谢!
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
解决方案
这个答案在评论中,所以我认为我不能将其用作官方答案,归功于 user16320675。
基本上,我没有初始化loanBalance 变量,所以它从零开始迭代为负数,而不是从起始余额开始递减。
推荐阅读
- r - 如何在 r 闪亮的应用程序中使用 {gtsummary} 包
- python - 如何在烧瓶中获得连接的客户端
- sql - 在 T-SQL 中构建 HR 数据集,需要行开始日期列和行结束日期列
- c - ClangFormat 参数和参数 binpacking 设置未按预期工作
- css - Css 属性在两个反应组件之间发生冲突
- c - 为什么即使输入大于给定的数字类型,scanf 也会返回正值?
- php - PHP stdClass 对象 - foreach
- javascript - TypeError:无法读取未定义 Discord、js 的属性“执行”
- cookies - Prestashop 附属公司的 Cookie 馅料
- spring - 使用 fido 进行 spring security 4 路身份验证,例如 yubikey