最低固定月度付款结果错误

时间:2015-02-19 20:34:54

标签: java loops nested-loops

编写一个程序,计算所需的最低固定月付款,以便在12个月内偿还信用卡余额。按固定的每月付款,我们指的是每个月不变的单个数字,而是每月支付的固定金额。

以下变量包含如下所述的值:

余额 - 信用卡上的未结余额

annualInterestRate - 年度利率小数

假设根据月末的余额(在该月的付款之后)每月复利。每月付款必须是10美元的倍数,并且所有月份都相同。请注意,使用此付款方案可能会使余额变为负数,这是可以的。所需数学的摘要如下:

每月利率=(年利率)/ 12.0

每月未付余额=(以前的余额) - (每月最低付款额)

每月更新余额=(每月未付余额)+(每月利率x每月未付余额)

=============================================== ==

测试案例1:

输入您的余额:3329

输入您的年利率:0.2

最低付款:310美元

测试案例2:

输入您的余额:4773

输入您的年利率:0.2

最低付款:440美元

测试案例3:

输入您的余额:3926

输入您的年利率:0.2

最低付款:360美元

从每月10美元的付款开始,计算余额是否会以一年的方式支付(确保考虑到每个月产生的利息 - 这意味着10 * 12韩元的工作量)。如果每月10美元的付款不足以在一年内偿还债务,每月支付10美元,并重复。

这就是我所拥有的,当我输入余额和利率时,我不能让程序等于测试案例中的最低付款额。我还必须使用嵌套循环。

import java.util.Scanner;
public class MinPayment {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter your balance: ");
        double balance = input.nextDouble();
        System.out.print("Enter your Annual Interest Rate: ");
        double rate = input.nextDouble();
        double i = 1;
        rate = rate / 12.0; 
        double payment = 0;
        while (i <= 12) {
            i++;
            balance = balance + (rate * balance);
            while (balance >= 0) {
                payment += 10;
                balance = balance - payment;
            }
        }
        System.out.printf("Lowest Payment: $%.0f", payment);
    }
}

2 个答案:

答案 0 :(得分:0)

double monthlyRate = annualRate / 12.0; 
double monthlyUnpaidBalance;
double prevBalance=balance;
double payment=10;
boolean minPaymentReached=false;

while(true)
{

   prevBalance=balance;

    for(int i=0;i<12;i++)
    {

    monthlyUnpaidBalance=prevBalance-payment; 

        if(monthlyUnpaidBalance<=0)
        {
        minPaymentReached=true;
        break;
        }
        prevBalance=monthlyUnpaidBalance+(monthlyRate*monthlyUnpaidBalance);
    }

    if(minPaymentReached)
    {
    break;
    }
    payment=payment+10;

}

通过设置等于余额的临时变量,我们保留初始值,并且能够设置&#39; prevBalance&#39;在while(true)循环开始时恢复平衡

答案 1 :(得分:0)

我认为错误在payment变量中,增加了10,然后再从余额中减去。

int i = 1; // Make it an int. Name it 'month'.
rate /= 12.0; 
double payment = 0; // totalPayment
final double SINGLE_PAYMENT = 10;
while (i <= 12) {
    i++;
    balance += rate * balance; 
    if (balance >= SINGLE_PAYMENT) { // Not while, this month only, not 0
        payment += SINGLE_PAYMENT;
        balance -= SINGLE_PAYMENT;
    }
}

费率逻辑供您考虑。