我是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);
}
}
帮助将不胜感激!
谢谢
您可以通过搜索适当的计算公式(而不是使用循环)以更简单的方式解决这个问题。在编程时,不仅要正确理解和使用语言结构(如循环和条件),还要学习最好的“算法”以最佳方式进行编程。
从…起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);
}
}
您可以使用基本数学在一行中完成此操作。
如果初始金额(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(...));
此外,您还将收到一些编译器警告,指出从长到整数的转换会导致精度下降-请使用浮点值而不是双精度值,或者在数字较小时忽略警告
这里的问题是,你只需要一遍又一遍地计算价值投资*利息,并将其存储在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