初学者需要Java编程帮助!我不知道如何解决这个问题



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

"创建一个投资申请,该申请可以计算出2500美元的投资需要多少年,如果每年以7.5%的速度复合,则价值至少5,000美元"

我已经尝试使用for循环和do-wele循环来尝试解决问题,但它行不通。请帮助!

这是我在尝试所有事物之后所拥有的:

/*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); 
    }   
}

帮助您将不胜感激!

谢谢,

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

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

这样,您实际上不断添加兴趣并积累了兴趣。

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

您可以使用基本数学来单行进行此操作。

如果初始金额(a)的利率(i)每年的C时间(i),则在期货中具有值(v)的时间(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(...));

您还会收到一些有关铸造从长到整数的精确度的编译器警告 - 使用float而不是double,或者如果您的数字小

,请忽略警告

您可以通过搜索适当的公式来计算此方法(而不是使用循环)来简单地解决此问题。编程时,正确理解和使用语言构造(例如循环和条件)不仅很重要,而且要以最佳的方式学习最好的"算法"。

来自http://www.csgnetwork.com/directcalccompinttrainer.html(通过搜索找到的链接之一):
如果最初的投资A处于I兴趣的情况下,则将来有FV的时间段(n)每年的C级Compime comper:

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

类似:

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

要迭代地进行,请注意,您需要计算年的数量,而不是投资金额。您的循环并没有添加总价值,而是将其重新计算,就好像它是每次通过循环的第一年一样。这将起作用:

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年n年后每年返回的总价值的公式,每年更复杂:

currentValue =初始投资 *(1 i) n

然后,您可以解决N,插入2500的initialInvestmentcurrentValue的7500。这通常会为您提供N的分数值,然后您需要汇总到达到目标金额所需的年数。您会发现Math.log()(或Math.log10())功能对此有用。

最新更新