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

初学者需要Java编程帮助!我能';我不知道如何着手解决这个问题,java,loops,Java,Loops,我是Java编程的初学者,我不知道如何解决这个问题: “创建一个投资应用程序,计算2500美元的投资如果按7.5%的年复合率计算,需要多少年才能达到至少5000美元的价值。” 我曾尝试使用for循环和do-while循环来解决这个问题,但都不起作用。请帮忙 这是我在尝试了目前为止的一切之后得到的: /*Investment.java *This program determines how many years it would take for $2500 to turn into $500

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

“创建一个投资应用程序,计算2500美元的投资如果按7.5%的年复合率计算,需要多少年才能达到至少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); 
    }   
}
/*Investment.java
*该计划确定2500美元在以下情况下需要多少年才能变成5000美元:
*年复利率为7.5%。
*日期:2012年10月27日
*/
/**
*下面的应用程序计算2500美元需要多少年才能完成
*如果按每年7.5%的复利计算,则可转换为5000美元。
*/
公共类投资{
公共静态void main(字符串[]args){
最终整数最大金额=5000;
国际投资=2500;
双倍利息=0.075;
双重总价值;
做{
总价值=(投资+(投资*利息));
}而(总价值<最大金额);
系统输出打印项次(总值);
}   
}
非常感谢您的帮助


谢谢,

这里的问题是,您只需反复计算价值
投资+投资*利息
,并将其存储在totalValue中。相反,你需要积累。它可能看起来像:

totalValue = investment;
do {
    totalValue = (totalValue + totalValue*interest);
}
while (totalValue < MAX_VALUE);
totalValue=投资;
做{
totalValue=(totalValue+totalValue*利息);
}
而(总值<最大值);
这样,你就可以不断地增加兴趣并积累起来

此外,正如前面所评论的,您要查找循环循环的次数,而不仅仅是最后的值。因此,您需要通过每次递增一个计数器来计算循环的重复次数。

类似于:

double years = 0;
while(interest < totalvalue) {
    totalValue = investment*interest;
    years++;
}
double year=0;
而(利息<总价值){
总价值=投资*利息;
年++;
}

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

如果初始金额(a)以每年计算c次的利率(i)计算,则未来具有值(V)的时间(n):n=[ln(V)-ln(a)]/[ln(c+i)-ln(c)]

因为它在问题中说“至少5000美元”,所以将其四舍五入并转换为int

int answer = (Integer) Math.round(getYearsToMature(...));

此外,您还将收到一些编译器关于从长到整数的转换精度损失的警告-使用float而不是double,或者忽略警告(如果您的数字很小)

要迭代执行此操作,请注意您需要计算年数,而不是投资金额。您的循环并没有添加到总值中,而是将其重新计算,就好像每次循环都是第一年一样。相反,这会起作用:

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);
    }
}
公共类投资{
公共静态void main(字符串[]args){
最终整数最大金额=5000;
国际投资=2500;
双倍利息=0.075;
双重总价值;
整数年=0;
做{
totalValue+=totalValue*利息;
年++;
}而(总价值<最大金额);
系统输出打印单位(年);
}
}
但是,更好的方法是查看N年后的总价值公式,年回报率为1%,每年复利:

当前值=初始投资*(1+I)N


然后您可以求解N,为
initialInvestment
插入2500,为
currentValue
插入7500。这通常会给你一个N的分数,然后你需要将其四舍五入以获得达到或超过目标数量所需的年数。您会发现(或)函数对此很有用。

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

来自(通过搜索找到的链接之一):
如果初始投资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;
公共类投资{
公共静态void main(字符串[]args){
最终整数最大金额=5000;
国际投资=2500;
双倍利息=0.075;
两年;
年份=(对数(最大金额)-对数(投资))/(对数(1+利息)-对数(1))
系统输出打印单位(年);
}   
}

您只需在
do while
循环中设置
totalValue
值,结果相同,您应该在每个循环中更新它。除了上面提到的错误之外,循环的主体将打印
totalValue
即一些数字>$5000,我会避免使用do-while循环,只使用while循环。任何do-while都可以写成while循环。虽然循环更容易阅读,但我认为问题在于计算年数。您的代码似乎并不关心这一点。
    ln(FV) - ln(A)
n = ------------------
    ln(1 + i) - ln(1)