0

[请阅读] 编辑:问题已经缩小到我计算不准确的必要付款金额这一事实。我现在需要一种方法来计算偿还 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

4

1 回答 1

-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);
于 2019-03-29T00:13:27.437 回答