1

我是 Java 编程的初学者,我不知道如何解决这个问题:

“创建一个投资应用程序,计算如果每年以 7.5% 的复利计算,2,500 美元的投资需要多少年才能达到至少 5,000 美元的价值”

我尝试使用 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); 
    }   
}

帮助将不胜感激!

谢谢,

4

5 回答 5

1

您可以使用基本数学在一行中完成此操作。

如果初始金额 (A) 以利率 (i) 每年计算 c 次,则未来获得值 (V) 的时间 (n):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,或者如果您的数字很小,则忽略警告

于 2012-10-28T19:03:26.327 回答
1

您可以通过搜索适当的计算公式(而不是使用循环)以更简单的方式解决此问题。在编程时,不仅要正确理解和使用语言结构(如循环和条件),而且要学习最好的“算法”以最佳方式完成它。

来自http://www.csgnetwork.com/directcalccompinttrainer.html(通过搜索找到的链接之一):
如果初始投资 A 在 i 的利息每年复利 c 倍,则未来有 FV 的时间段 (n) :

    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); 
    }   
}
于 2012-10-28T19:16:13.240 回答
1

这里的问题是您只是investment + investment*interest一遍又一遍地计算值,并将其存储在 totalValue 中。相反,你需要积累。它可能看起来像:

totalValue = investment;
do {
    totalValue = (totalValue + totalValue*interest);
}
while (totalValue < MAX_VALUE);

这样,您就可以继续实际添加兴趣并累积它。

此外,正如评论的那样,您正在寻找循环循环的次数,而不仅仅是最后的值。因此,您需要通过每次递增计数器来计算循环重复的次数。

于 2012-10-28T18:59:31.067 回答
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 年后以每年 I% 的回报率计算总价值的公式,每年复合:

currentValue = 初始投资 * (1 + I) N

然后你可以求解 N,插入 2500initialInvestment和 7500 currentValue。这通常会为您提供 N 的分数值,然后您需要将其四舍五入以获得达到或超过目标金额所需的年数。您会发现Math.log()(or Math.log10()) 函数对此很有用。

于 2012-10-28T19:03:28.737 回答
0

就像是:

double years = 0;
while(interest < totalvalue) {
    totalValue = investment*interest;
    years++;
}

?

于 2012-10-28T19:00:18.927 回答