2017-04-02 16 views
1

再帰的メソッドを使用して、同じ金額(ユーザーが入力したもの)が投資された場合に合計1000万ドルの目標に達するまでの月数を計算するプログラムを作成しようとしています。毎月2%の利子が追加されています。問題は、メソッドがカウンタをあまりに早く返すことで、私の「月」の出力が不正確になることです。私の推測では、私の最後のelseステートメントが間違っているか、私のカウンターが誤って再帰的メソッドの論理エラー

置かれ相続人はあなたが逃した私のコード

import java.util.Scanner; 
    public class MoneyMakerRecursion { 
     public static int counter = 0; 
     public static void main(String[] args) { 
      //Variables declared 
      Scanner userInput = new Scanner(System.in); 
      double investment; 
      //User is prompted for input 
      System.out.println("Enter your monthly investment: "); 
      investment = userInput.nextInt(); 
      //Method is called 
      Sum(investment); 
      //Results from recursive method output 
      System.out.println("It should take " + counter + " month(s) to reach your goal of $10,000,000"); 
     } 
     //recursive Method 
     public static double Sum(double investment) { 
      counter++; 
      double total = (investment * 0.02) + investment; 
      if(total >= 10000000) {return counter;} 
      else {return Sum(investment+total);} 
     } 
    } 
+0

なりません、問題があることです合計に合計を加えて、各反復で投資を倍増させています。 –

答えて

1

重要なポイントは、毎月の投資はすべての月を通して同じであるということであるということです。したがって、静的変数でなければなりません。

2番目のポイントは、そのメソッドのローカル変数であった合計に投資を追加したことです。これは月の実際の投資ではありません。月ごとに変更されるその関数に渡される値(このステートメントのコードを検討してください)

以下の作業コードを参照してください。

import java.util.Scanner; 
    public class MoneyMakerRecursion { 
     public static int counter = 0; 
     public static double investment = 0; 
     public static void main(String[] args) { 
      //Variables declared 
      Scanner userInput = new Scanner(System.in); 
      //User is prompted for input 
      System.out.println("Enter your monthly investment: "); 
      investment = userInput.nextInt(); 
      //Method is called 
      Sum(investment); 
      //Results from recursive method output 
      System.out.println("It should take " + counter + " month(s) to reach your goal of $10,000,000"); 
     } 
     //recursive Method 
     public static double Sum(double totalInvestment) { 
      counter++; 
      double total = (totalInvestment* 0.02) + totalInvestment; 
      if(total >= 10000000) {return counter;} 
      else {return Sum(total+investment);} 
     } 
    } 

ここで結果

Enter your monthly investment: 
100000 
It should take 55 month(s) to reach your goal of $10,000,000 

は、スナップショットである:ここでの関心は、年間の利息に0.02毎月の利息を変換するので、毎年考えられている、それは0.24

enter image description here

+0

ニースキャッチ、私はあなたのロジックに同意+1 ...しかし、誰がquesitonをdownvoted? –

+0

@TimBiegeleisenありがとうございます。 – Dhiraj

+0

@TimBiegeleisen私はあなたの答えをdownvoted。ごめんなさい。この答えがあなたを満足させてくれることを願っています。私はあなたの答えを下落させました。 – Dhiraj

関連する問題