Java 此方法程序运行异常…需要帮助吗
好的,我正在开发的这个java程序应该计算30年的投资价值。它询问用户开始投资的位置和百分比(以小数形式)。我以为我已经弄明白了,但我的程序返回了一些荒谬的值。有人能看看我的代码,告诉我我做错了什么吗 这些是提供给我的样本输出 投资额是多少?一千 年利率是多少。09Java 此方法程序运行异常…需要帮助吗,java,methods,Java,Methods,好的,我正在开发的这个java程序应该计算30年的投资价值。它询问用户开始投资的位置和百分比(以小数形式)。我以为我已经弄明白了,但我的程序返回了一些荒谬的值。有人能看看我的代码,告诉我我做错了什么吗 这些是提供给我的样本输出 投资额是多少?一千 年利率是多少。09 Years Future Value ----- ------------ 1 $1093.81 2 $1196.41 ... 29 $13467.25 30 $14730.58
Years Future Value
----- ------------
1 $1093.81
2 $1196.41
...
29 $13467.25
30 $14730.58
我的产出回报了几十亿、几万亿美元……简直是疯狂的东西。我得到的公式是
futureValue = investmentAmmount * (1 + monthlyInterestRate)^numberOfYears*12
这是我的程序代码
import java.util.Scanner;
import java.text.NumberFormat;
import java.util.Locale;
import java.text.DecimalFormat;
public class InvestmentValue
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
NumberFormat df = DecimalFormat.getCurrencyInstance(Locale.US);
double investmentAmmnt;
// monthly interest rate
double mri;
int years;
System.out.print("What is the ammount invested? ");
investmentAmmnt = input.nextDouble();
System.out.print("What is the annual interest rate? ");
mri = input.nextDouble();
futureInvestmentValue(investmentAmmnt, mri, 30);
}
public static double futureInvestmentValue(double investmentAmmnt, double mri, int years)
{
NumberFormat df = DecimalFormat.getCurrencyInstance(Locale.US);
System.out.println("The amount invested: " + (df.format(investmentAmmnt)));
System.out.println("Annual interest rate: " + mri);
System.out.println("Years \t \t Future Value");
for (int i = 1; i <= years * 12; i++){
investmentAmmnt = investmentAmmnt * Math.pow(1 + (mri / 12),(years * 12));
if (i % 12 == 0){
System.out.println(i / 12 + "\t\t" + (df.format(investmentAmmnt)));
}
}
return investmentAmmnt;
}
}
import java.util.Scanner;
导入java.text.NumberFormat;
导入java.util.Locale;
导入java.text.DecimalFormat;
公共类投资价值
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
NumberFormat df=DecimalFormat.getCurrencyInstance(Locale.US);
双重投资;
//月利率
双磁共振成像;
整数年;
System.out.print(“投资的金额是多少?”);
investmentAmmnt=input.nextDouble();
打印(“年利率是多少?”);
mri=input.nextDouble();
未来投资价值(投资金额,mri,30);
}
公共静态双未来投资价值(双投资AMMNT、双mri、整数年)
{
NumberFormat df=DecimalFormat.getCurrencyInstance(Locale.US);
System.out.println(“投资金额:+(df.format(investmentAmmnt)));
System.out.println(“年利率:+mri”);
System.out.println(“年\t\t未来值”);
对于(inti=1;i,它的工作原理如下:
public static double futureInvestmentValue(final double investmentAmmnt, double mri, int years)
{
NumberFormat df = DecimalFormat.getCurrencyInstance(Locale.US);
double amount = investmentAmmnt;
System.out.println("The amount invested: " + (df.format(investmentAmmnt)));
System.out.println("Annual interest rate: " + mri);
System.out.println("Years \t \t Future Value");
for (int i = 1; i <= years ; i++){
amount = investmentAmmnt * Math.pow(1 + (mri /100),(i ));
System.out.println(i + "\t\t" + (df.format(amount)));
}
return amount;
}
公共静态双未来投资价值(最终双投资AMMNT、双mri、整数年)
{
NumberFormat df=DecimalFormat.getCurrencyInstance(Locale.US);
双倍金额=投资金额;
System.out.println(“投资金额:+(df.format(investmentAmmnt)));
System.out.println(“年利率:+mri”);
System.out.println(“年\t\t未来值”);
对于(int i=1;i输出
年未来价值
1 $1,030.00
2 $1,060.90
3 $1,092.73
4 $1,125.51
5 $1,159.27
6 $1,194.05
7 $1,229.87
8 $1,266.77
9 $1,304.77
10 $1,343.92
11 $1,384.23
12 $1,425.76
13 $1,468.53
14 $1,512.59
15 $1,557.97
16 $1,604.71
17 $1,652.85
18 $1,702.43
19 $1,753.51
20 $1,806.11
21 $1,860.29
22 $1,916.10
23 $1,973.59
24 $2,032.79
25 $2,093.78
26 $2,156.59
27 $2,221.29
28 $2,287.93
29 $2,356.57
30$2427.26
问题在于公式futureValue=investmentamount*(1+monthlyinterestate)^numberOfYears*12
计算未来任意年份的投资价值。问题是,您的for循环计算的数量超过了它需要的数量。该公式只需执行一次。您的函数futureInvestmentValue不应具有for循环。您确定您的公式正确吗?@neito,如果您感到沮丧,请b我不怪你,我认为人们对“我的代码出了什么问题”反应过度你的问题的性质。很明显,你在解决问题时投入了大量的精力,你发布了一个完整的可运行程序来演示问题,并且通过发布预期的输出,你做得很好。无论如何,看起来你得到了一些好的答案——祝你好运!有一件事可以帮助你正确地缩进代码;大多数编辑器都有一个“重新格式”命令将为您执行此操作。很难看到方法和其他块在这里开始和结束。@jas谢谢,是的,很高兴看到至少有一些人愿意提供帮助,而不是像一群秃鹫一样。我想你们中的一些人盯着计算机屏幕太久了,需要到外面去喝点新鲜的酒ir。@neito说“我认为这些评论不必要的粗鲁”可能是有道理的。你自己发表粗鲁的评论是没有道理的。好吧,我现在可以看出我做错了什么。我认为我太逐字逐句了。@neito,如果你把for循环中的行改成amount=investmentamnt*Math.pow(1+(mri/12),(I*12))
您将在第30年获得与您的预期产出相匹配的14730.58美元。我不是说@Alexander是错的——也许这个产出比预期的更正确,但仅供参考。是的,我之所以能够得到这部分,是因为@Alexander的帮助。同时感谢您提供的进一步帮助。