[请阅读] 编辑:问题已经缩小到我计算不准确的必要付款金额这一事实。我现在需要一种方法来计算偿还 x 贷款所需的付款次数,y 利息和 z 每月支付的金额。我最初的方法是用用户提供的每月付款(例如 250 美元)和利率(例如 13.5%)来偿还贷款(例如 1000 美元)并获得每月支付的金额(我知道措辞很奇怪)因此你会得到:
250 - 250 * 0.135 = 216.25
然后将总贷款除以该数字,所以
1000 / 216.25 = 4.62
然后 ceil 值以获得 5 总付款。这适用于刚刚给出的示例,正如您在我的帖子底部的代码中看到的那样,但如果我们举个例子:
200,000 美元的贷款,6% 的利率,每月支付 1500 美元,我们得到:
1500 - 1500 * 0.06 = 1410
接着:
$200,000 / 1410 = 141.8 ish
因此,付款金额(根据此计算)应为 142。但是,正如您在评论线程中看到的那样,这是非常不正确的。通过反复试验,正确的付款次数实际上是 221,到目前为止,我无法使用任何计算来获得这个值。因此如下:
tl;dr - 我需要一种方法来准确计算摊销中的付款次数,仅使用初始贷款金额、利率和建议的每月支付金额。
在此先感谢,这个定义缩小了问题的范围。
[原始帖子] 我创建了一个程序,为我的 AP Compsci 课程制作摊销图表。在我告诉程序处理更大的数字之前,一切都运行得很顺利。出于某种原因,程序只是在某个值处停止,我不知道为什么。我希望这里有人可以帮助我调试它。
我在我的 IDE 中使用了 intelliJ,我不知道还有什么其他信息在这里真正有帮助。
首先:是的,我知道我应该使用 ArrayList 而不是一维数组,我在课堂上了解它们之前就开始这样做了,我不想重做。我只想知道我现有代码的问题,以便我可以将其提交并完成它。唯一的要求是它能够正常运行。是的,我知道代码很烂,我不想听。只是寻找我现有代码的问题。是的,我知道我不擅长编码。请不要烤;-;
尝试注释掉循环,手动计算它,逐步完成等等。似乎无法得出任何结论。
这是方法:
public static void amortization(){
int[] info = new int[10000000];
double Lamt;
double IRate;
double MRate;
double payMonth;
double firstlyMonth;
double interestedSub;
double interestedAmt;
double amtPayments;
double mPayment;
double iPayment;
double pPayment;
double pBalance;
double q;
double finalMPymt;
double finalIPymt;
double finalPPymt;
double finalPBalance;
Scanner amortkey = new Scanner(System.in);
System.out.println("Please enter the following values:");
System.out.println("Loan amount:");
Lamt=amortkey.nextDouble();
System.out.println("Annual Interest Rate, in decimal form:");
IRate=amortkey.nextDouble();
System.out.println("Monthly Payment Amount:");
payMonth=amortkey.nextDouble();
interestedSub=payMonth * IRate;
interestedAmt=payMonth - interestedSub;
firstlyMonth=Lamt / interestedAmt;
amtPayments=Math.ceil(firstlyMonth);
MRate=IRate / 12;
for(int a=0; a<amtPayments; a++){
info[a]=a+1;
}
System.out.println();
System.out.println(" PAYMENT MONTHLY INTEREST PRINCIPAL PRINCIPAL");
System.out.println(" NUMBER PAYMENT PAYMENT PAYMENT BALANCE");
System.out.println();
pBalance=Lamt; //1000
//THIS LOOP DETERMINES THE CHART
for(int b=0; b<amtPayments-1; b++){//b starts 0, must climb to the payments that must be made.
iPayment=pBalance * MRate; //calculate interest payment by taking the rate portion of the principal away.
pPayment=payMonth - iPayment;//calculate principal payment independently from total month pay
q=pBalance - pPayment;//calculate new balance of principal, q
mPayment=iPayment + pPayment;//make monthly payment equal to whatever the principal is plus the interest owed
pBalance=q;//reset the loop with a new principal balance
System.out.println(" " + info[b] + " " + Math.round(mPayment * 100.00) / 100.00 + " " + Math.round(iPayment * 100.00) / 100.00 + " " + Math.round(pPayment * 100.00) / 100.00 + " " + Math.round(pBalance * 100.00) / 100.00);
System.out.println();
if(pBalance<mPayment){
finalIPymt=pBalance * MRate;
finalMPymt=pBalance + finalIPymt;
finalPPymt=pBalance;
finalPBalance=0;
System.out.println(" " + info[b+1] + " " + Math.round(finalMPymt * 100.00) / 100.00 + " " + Math.round(finalIPymt * 100.00) / 100.00 + " " + Math.round(finalPPymt * 100.00) / 100.00 + " " + Math.round(finalPBalance * 100.00) / 100.00);
}
}
}
首先尝试数字 1000、0.135 和 250。
预期的输出是
PAYMENT MONTHLY INTEREST PRINCIPAL PRINCIPAL
NUMBER PAYMENT PAYMENT PAYMENT BALANCE
1 250.0 11.25 238.75 761.25
2 250.0 8.56 241.44 519.81
3 250.0 5.85 244.15 275.66
4 250.0 3.1 246.9 28.76
5 29.09 0.32 28.76 0.0
而实际的结果确实是一回事。它就像一个魅力。
现在试试这些数字:200000、0.06 和 1500。
出于某种奇怪的原因,程序在条目 141 处结束,最终输出为:
141 1500.0 494.88 1005.12 97970.54
它以退出代码 0 结束,没有错误,只是停在那里。
我知道有很多要求,但如果有人将代码放入他们的 IDE 并对其进行修改直到他们发现问题,我将不胜感激。请尝试我在这篇文章中输入的确切数字,看看是否有任何问题,我希望能够将问题与解决方案进行比较。再次为凌乱和业余的代码道歉,我对这一切还是比较陌生。感谢您的帮助,并在此先感谢您。
干杯:D