1

私は Java でのプログラミングの初心者であり、この問題を解決する方法がわかりません。

「年間 7.5% で複利計算した場合、2,500 ドルの投資が少なくとも 5,000 ドルの価値になるまでにかかる年数を計算する投資アプリケーションを作成する」

for ループと do-while ループを使用して問題を解決しようとしましたが、うまくいきません。助けてください!

これは、これまですべてを試した後の結果です。

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

助けていただければ幸いです。

ありがとう、

4

5 に答える 5

1

ここでの問題は、値investment + investment*interestを何度も計算し、それをtotalValueに格納しているだけであるということです。代わりに、蓄積する必要があります。次のようになります。

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

このように、あなたは実際に興味を追加し、それを蓄積し続けます。

さらに、コメントされているように、最後の値だけでなく、ループがループした回数を探しています。したがって、毎回カウンターをインクリメントして、ループが繰り返される回数をカウントする必要があります。

于 2012-10-28T18:59:31.067 に答える
1

これは、基本的な数学を使用して 1 行で行うことができます。

金利 (i) での当初の金額 (A) が年に 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(...));

また、long から Integer へのキャストで精度が失われるというコンパイラの警告が表示されます - double の代わりに float を使用するか、数値が小さい場合は警告を無視してください

于 2012-10-28T19:03:26.327 に答える
1

これを計算するための適切な式を (ループを使用する代わりに) 検索することで、より簡単な方法でこれを解決できる場合があります。プログラミングでは、言語構造 (ループや条件など) を正しく理解して使用するだけでなく、それを最適な方法で実行するための最適な "アルゴリズム" を学ぶことも重要です。

http://www.csgnetwork.com/directcalccompinttrainer.html (検索で見つかったリンクの 1 つ)から:
初期投資 A が i の利息で年に 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); 
    }   
}
于 2012-10-28T19:16:13.240 に答える
0

何かのようなもの:

double years = 0;
while(interest < totalvalue) {
    totalValue = investment*interest;
    years++;
}

于 2012-10-28T19:00:18.927 に答える
0

繰り返し行うには、投資額ではなく年数を計算する必要があることに注意してください。あなたのループは合計値に追加されていません。ループを通過するたびに最初の年であるかのように再計算しています。これは代わりに機能します:

public class Investment {
    public static void main(String[] args) {
        final int MAX_AMOUNT = 5000;
        int investment = 2500;
        double interest = 0.075;
        double totalValue;

        int years = 0;
        do {
            totalValue += totalValue * interest;
            years++;
        } while (totalValue < MAX_AMOUNT);
        System.out.println(years);
    }
}

ただし、より良いアプローチは、年複利で年率 1% のリターンで N 年後の合計価値の式を調べることです。

currentValue = 初期投資 * (1 + I) N

initialInvestment次に、Nについて解くことができますcurrentValue。これは通常、N の小数値を示します。これを切り上げて、目標額に達するか超えるために必要な年数を得る必要があります。これにはMath.log()(またはMath.log10()) 関数が便利です。

于 2012-10-28T19:03:28.737 に答える