[请阅读]编辑:问题已经缩小到我计算出的付款金额不正确的事实。我现在需要一种方法来计算还清x贷款(y利息)和z(仅每月)的还款额。我的最初方法是采用用户提供的每月付款(例如$ 250)和利率(例如13.5%)来还清贷款(例如$ 1000)并获得每个感兴趣月份的付款金额(措辞怪异,我知道)因此,您将获得:
250-250 * 0.135 = 216.25
然后将总贷款除以该数字,所以
1000 / 216.25 = 4.62
然后设置该值以获取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
答案 0 :(得分:-2)
递增b,然后使用该b代替b + 1, 在您编写此行之前
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);