我有一个项目,必须要求用户提供贷方余额和费率,然后输出您支付最低费用后未来12个月需要支付的金额(计算方法:余额* 0.03,如果那个低于10,则最低支付额为10美元)。 我无法弄清楚为什么“平衡* 0.03”在“minPay”值不会增加时会循环。
import java.util.Scanner;
public class Project1Term2
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println();
System.out.print("Enter credit card balance: ");
double balance = in.nextDouble();
System.out.print("Enter interest rate: ");
double interest = in.nextDouble();
interest = interest / 100;
for(int i = 0; i <= 12; i++)
{
Calculate out = new Calculate(balance, interest);
System.out.println(out.getNewValue());
balance = out.getNewValue();
}
}
}
class Calculate
{
private final double rate;
private double balance;
private double minPay;
private double newBalance;
Calculate(double balance, double rate)
{
this.balance = balance;
this.rate = rate;
}
double getNewValue()
{
if((balance * 0.03) < 10)
{
minPay = 10;
}
else
{
minPay = balance * 0.03;
}
newBalance = (balance - minPay) + (balance * rate);
return newBalance;
}
}
答案 0 :(得分:2)
您正在每个循环上创建一个新的Calculate实例。在很多方面都是错的。一个结果是你永远不会递增minPay
,因为每个实例只使用一次。
答案 1 :(得分:0)
如果你只是想找到一个答案,说明为什么你的余额没有下降,答案就是你的逻辑不正确。
newBalance = (balance - minPay) + (balance * rate);
应该是:
newBalance = balance + (balance * rate) - minPay ;
您希望将兴趣添加到当前余额,然后减去最低付款金额。用这个逻辑运行你的程序给了我:
Enter credit card balance: 100
Enter interest rate: .1
90.1
80.1901
70.2702901
60.340560390099995
50.4009009504901
40.45130185144059
30.49175315329203
20.522244906445323
10.542767151351768
0.5533099185031194
-9.446136771578377
-19.455582908349953
-29.475038491258303
您还可以开展一些更好的编码实践。例如,您不应该在每个循环中实例化该类的新实例。相反,继续使用相同的类实例。您还应该检查天平是否为0,例如我从运行程序得到的输出允许我支付负数。
希望这有帮助,如果没有意义,请随时提问。