我正在查看用于计算投资的代码,直到它加倍并且我收到了一个我似乎无法解决的无限循环。任何人都可以弄清楚为什么这会给我一个无限循环?我已经完成了自己,但我似乎无法找到问题所在。提到的“期间”是每年多少次利息复合。
double account = 0; //declares the variables to be used
double base = 0;
double interest = 0;
double rate = 0;
double result = 0;
double times = 0;
int years = 0;
int j;
System.out.println("This is a program that calculates interest.");
Scanner kbReader = new Scanner(System.in); //enters in all data
System.out.print("Enter account balance: ");
account = kbReader.nextDouble();
System.out.print("Enter interest rate (as decimal): ");
rate = kbReader.nextDouble();
System.out.println(" " + "Years to double" + " " + "Ending balance");
base = account;
result = account;
for (j=0; j<3; j++){
System.out.print("Enter period: ");
times = kbReader.nextDouble();
while (account < base*2){
interest = account * rate / times;
account = interest + base;
years++;
}
account = (((int)(account * 100))/100.0);
//results
System.out.print(" " + i + " " + account + "\n");
account = result;
}
代码应该要求三个“期间”,或者每年复合输入数据的三个不同时间(每年,每月,每天等)。
非常感谢!
答案 0 :(得分:1)
你应该添加一些健全性检查。要么检查所有数字是否会产生有限数量的循环(account
和rate
!= 0,也许是其他一些东西),或者更简单地说,如果你循环次数多于合理(例如1000)。我的猜测是rate
为0
导致帐户没有增加,因此会永远循环。
您有计算错误:
account = interest + base;
据推测,这应该是:
account = account + interest;
另外,你确定要进行int演员吗?
account = (((int)(account * 100))/100.0);
你显然丢掉了小于1美分的价值。但是,如果兴趣太小,你就不会有任何改变。
答案 1 :(得分:1)
而不是做
account =interest +base
你应该
account = interest +account
答案 2 :(得分:0)
它可能永远循环的原因是double
的{{1}}计算通过强制转换为account
而被有效截断,因此如果int
太小,它可能永远不会改变并且rate
的新值不会至少增加account
。