当前位置: 首页 > 知识库问答 >
问题:

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

柴阳云
2023-03-14

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

“创建一个投资应用程序,计算如果按7.5%的年复利计算,2500美元的投资需要多少年才能达到至少5000美元。”

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

这是我在尝试了目前为止的一切之后得到的:

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

帮助将不胜感激!

谢谢

共有3个答案

蔚琦
2023-03-14

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

从…起http://www.csgnetwork.com/directcalccompinttrainer.html(通过搜索找到的链接之一):
如果初始投资a以每年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); 
    }   
}
傅涵忍
2023-03-14

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

如果初始金额(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(...));

此外,您还将收到一些编译器警告,指出从长到整数的转换会导致精度下降-请使用浮点值而不是双精度值,或者在数字较小时忽略警告

居飞扬
2023-03-14

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

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

这样,你就可以不断地增加兴趣并积累起来。

此外,如上所述,您正在寻找循环的次数,而不仅仅是末尾的值。因此,您需要通过每次增加一个计数器来计算循环重复的次数。

 类似资料:
  • 我想在一个controller方法中创建一个新的Role对象,然后该对象显示一个链接到Hibernate/H2数据库的数据存储库中的所有“角色”,但每次我尝试创建一个新对象时,都会出现一个SQL错误,对我来说这似乎不对。如果有人能帮忙,那就太好了。 下面是repo-https://github.com/danielturato/instateam-th 对于角色实体,我尝试了以下操作: 将名称字段

  • 我想使它从“游戏26”类到“游戏39”类,如果用户经历了从“游戏17”类到“游戏18”类。但如果用户没有通过,要使从“Game26”类到“Game30”类。

  • 我正在用java制作一个tic-tac-toe游戏,作为家庭作业。我有一个名为TicTacToe的父类和一个名为humanVsHuman的派生类。 下面的方法是在派生类中编写的。它提示用户输入他们想要输入游戏棋子的位置(X或O),然后从父类中调用两个方法:一个将X或O存储在名为setGb()的多功能数组中,另一个用名为displayBoard()的新棋子显示棋盘。 方法如下: 我收到以下运行时错误

  • 失败:生成失败,出现异常。 > 其中:Script“C:\flutter\packages\flutter_tools\gradle\flutter.gradle”行:900 错误:任务“:app:CompileFlutterBuildDebug”执行失败。 进程“command”C:\flutter\bin\flutter.bat“已完成,退出值为非零%1 生成在%12s中失败异常:Gradle

  • 说明: 这实际上是一个诡计问题,因为这段代码不会编译!正如您在第1章中所记得的,浮点文字被假定为双倍,除非后缀有一个f,如2.1f。如果正确地将该值设置为2.1F,那么升级将与上一个示例类似,两个操作数都升级为double,结果将是一个double值。 但我不明白。如果浮动y=2.1;假设是双倍,则不需要将变量y提升到双倍。而我更困惑的是下一个问题,那就是:

  • /**程序可以将十进制转换为二进制并报告是否使用了非法字符*程序不能将二进制转换为十进制*/import java.util.scanner; /***这个类包含一个完整的程序,只有一个main()方法,用于*将非负十进制整数(即以10为基数的整数)转换为*正二进制整数(即以2为基数的整数)。要*转换的值是从命令行读入的。*/public class BaseConversions2{public