初学者需要Java编程帮助!我无法弄清楚如何解决这个问题

时间:2012-10-28 18:55:00

标签: java loops

我是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); 
    }   
}

非常感谢帮助!

谢谢,

5 个答案:

答案 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())函数对此有用。