Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此方法程序运行异常…需要帮助吗_Java_Methods - Fatal编程技术网

Java 此方法程序运行异常…需要帮助吗

Java 此方法程序运行异常…需要帮助吗,java,methods,Java,Methods,好的,我正在开发的这个java程序应该计算30年的投资价值。它询问用户开始投资的位置和百分比(以小数形式)。我以为我已经弄明白了,但我的程序返回了一些荒谬的值。有人能看看我的代码,告诉我我做错了什么吗 这些是提供给我的样本输出 投资额是多少?一千 年利率是多少。09 Years Future Value ----- ------------ 1 $1093.81 2 $1196.41 ... 29 $13467.25 30 $14730.58

好的,我正在开发的这个java程序应该计算30年的投资价值。它询问用户开始投资的位置和百分比(以小数形式)。我以为我已经弄明白了,但我的程序返回了一些荒谬的值。有人能看看我的代码,告诉我我做错了什么吗

这些是提供给我的样本输出

投资额是多少?一千

年利率是多少。09

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的帮助。同时感谢您提供的进一步帮助。