[英]Repeating values
我有一个项目,要求用户提供贷方余额和利率,然后输出如果您支付了最低还款额(计算方式为:余额* 0.03,并且如果那是低于10,则最低付款金额为10美元)。 我无法弄清楚为什么“ balance * 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;
}
}
您将在每个循环上创建一个新的Calculate实例。 这在很多方面都是错误的。 结果是您永远不会增加minPay
,因为每个实例仅使用一次。
如果您只是在寻找有关为什么余额没有减少的答案,那么答案是您的逻辑不正确。
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,例如,我从运行程序时得到的输出使我可以支付负数。
希望这会有所帮助,如果没有意义,请随时提出问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.