我是Java编程的初学者,我无法弄清楚如何解决这个问题:
“创建一个投资应用程序,计算如果每年复合7.5%,那么2,500美元投资至少需要5000美元才能投入多少年”
我尝试使用for循环和do-while循环来尝试解决问题,但它不起作用。请帮助!
这是我到目前为止所做的一切之后所拥有的:
/*Investment.java
*This program determines how many years it would take for $2500 to turn into $5000 if
*compounded at 7.5% annually.
*Date: October 27th, 2012
*/
/**
* The following application calculates how many years it will take for $2500 to
* turn into $5000 if compounded at 7.5% annually.
*/
public class Investment {
public static void main(String[] args) {
final int MAX_AMOUNT = 5000;
int investment = 2500;
double interest = 0.075;
double totalValue;
do {
totalValue = (investment + (investment * interest));
} while (totalValue < MAX_AMOUNT);
System.out.println(totalValue);
}
}
非常感谢帮助!
谢谢,
答案 0 :(得分:1)
这里的问题是你只是一遍又一遍地计算值investment + investment*interest
,并将其存储在totalValue中。相反,你需要积累。它可能看起来像:
totalValue = investment;
do {
totalValue = (totalValue + totalValue*interest);
}
while (totalValue < MAX_VALUE);
通过这种方式,您可以实际添加兴趣并累积它。
此外,正如评论所述,您正在寻找循环循环的次数,而不仅仅是最后的值。因此,您需要通过每次递增计数器来计算循环重复的次数。
答案 1 :(得分:1)
您可以使用基本数学在一行中完成此操作。
如果利率(i)的初始金额(A)每年计算c次,则时间(n)在期货中具有值(V):n = [ln(V) - ln(A)] / [ln(c + i) - ln(c)]double getYearsToMature(double v, double i, int c, double a)
{
return (Math.log(v) - Math.log(a))/(Math.log(c+i) - Math.log(c));
}
因为它在问题中说“至少5000美元”只是围绕它并转向int ..
int answer = (Integer) Math.round(getYearsToMature(...));
你也会得到一些关于从long转换为Integer的精度损失的编译器警告 - 使用float而不是double,或者如果你的数字很小则忽略警告
答案 2 :(得分:1)
您可以通过搜索适当的公式来计算它(而不是使用循环),以更简单的方式解决这个问题。在编程时,不仅要正确理解和使用语言结构(如循环和条件),还要学习以最佳方式完成它的最佳“算法”。
来自http://www.csgnetwork.com/directcalccompinttrainer.html(通过搜索找到的其中一个链接):
如果我感兴趣的初始投资A每年复合c次,那么将来的期间(n)将具有FV:
ln(FV) - ln(A)
n = ------------------
ln(c + i) - ln(c)
注意:ln是自然对数函数。
对于每年复利的情况,公式变为:
ln(FV) - ln(A)
n = ------------------
ln(1 + i) - ln(1)
以下是使用此公式的代码(它将为您提供确切的年数,包括可以调整/截断和打印的分数):
import java.lang.Math;
public class Investment {
public static void main(String[] args) {
final int MAX_AMOUNT = 5000;
int investment = 2500;
double interest = 0.075;
double years;
years = (log(MAX_AMOUNT) - log(investment)) / (log(1 + interest) - log(1))
System.out.println(years);
}
}
答案 3 :(得分:0)
类似的东西:
double years = 0;
while(interest < totalvalue) {
totalValue = investment*interest;
years++;
}
答案 4 :(得分:0)
要迭代执行此操作,请注意您需要计算年的数量,而不是投资金额。你的循环没有添加到总值,它重新计算它就好像它是每次循环的第一年。这可以改为:
public class Investment {
public static void main(String[] args) {
final int MAX_AMOUNT = 5000;
int investment = 2500;
double interest = 0.075;
double totalValue;
int years = 0;
do {
totalValue += totalValue * interest;
years++;
} while (totalValue < MAX_AMOUNT);
System.out.println(years);
}
}
然而,更好的方法是在每年复合百分之一年的N年后查看总价值的公式,每年复合一次:
currentValue = initialInvestment *(1 + I) N
然后你可以求解N,插入2500 initialInvestment
和7500 currentValue
。这通常会为您提供N的小数值,然后您需要向上舍入以达到达到或超过目标金额所需的年数。您会发现Math.log()
(或Math.log10()
)函数对此有用。