0

投資を計算するために使用されるコードを、それが2倍になり、解決できないように見える無限ループを受け取るまで調べていました。なぜこれが私に無限ループを与えているのか誰かが理解できますか?私は自分自身を通り抜けましたが、問題を見つけることができないようです。言及される「期間」は、利息が複合される1年に何回かです。

double account = 0; //declares the variables to be used
   double base = 0;
   double interest = 0;
   double rate = 0;
   double result = 0;
   double times = 0;
   int years = 0;
   int j;

   System.out.println("This is a program that calculates interest.");
   Scanner kbReader = new Scanner(System.in); //enters in all data  
   System.out.print("Enter account balance: ");
   account = kbReader.nextDouble();
   System.out.print("Enter interest rate (as decimal): ");
   rate = kbReader.nextDouble();

   System.out.println("                    " + "Years to double" + "     " +     "Ending balance");
   base = account;
   result = account;
   for (j=0; j<3; j++){
       System.out.print("Enter period: ");
       times = kbReader.nextDouble();
       while (account < base*2){
           interest = account * rate / times;
           account = interest + base;
           years++;
       }
        account = (((int)(account * 100))/100.0);
       //results
       System.out.print("                         " + i + "               " + account + "\n");
       account = result;
   }

コードは、3つの「期間」、または入力されたデータが1年に合成される3つの異なる回数(たとえば、年次、月次、日次など)を要求する必要があります。

どうもありがとう!

4

3 に答える 3

1

健全性チェックを追加する必要があります。すべての数値が有限数のループになるかどうかを確認するか(accountそしてrate!= 0、おそらく他の何か)、またはもっと簡単に言えば、合理的であるよりも多くの回数(たとえば1000)ループした場合は中断します。私の推測では、アカウントの増加rateは発生しないため、永久ループになります。0

計算エラーがあります:

account = interest + base;

おそらくこれは次のようになります。

account = account + interest;

また、intをキャストしてもよろしいですか?

account = (((int)(account * 100))/100.0);

どうやら1セント未満の値を捨てているようです。ただし、関心が小さすぎる場合は、変更はありません。

于 2012-10-07T03:02:16.153 に答える
1

する代わりに

account =interest +base

あなたが持っている必要があります

account = interest +account
于 2012-10-07T03:06:16.643 に答える
0

が永久ループになる可能性がある理由は、にキャストすることでのdouble計算accountが効果的に切り捨てられるためです。したがって、が小さすぎて、の新しい値が少なくとも。だけ大きくならないint場合は、計算が変更されない可能性があります。rateaccount0.005

于 2012-10-07T03:03:22.320 に答える