0

我正在查看一个用于计算投资的代码,直到它翻了一番,我收到了一个我似乎无法解决的无限循环。谁能弄清楚为什么这给了我一个无限循环?我已经经历了自己,但我似乎无法找到问题所在。所指的“期间”是每年复利的次数。

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;
   }

代码应要求三个“期间”,或输入数据每年复合的三个不同时间(例如每年、每月、每天等)

非常感谢!

4

3 回答 3

1

您应该添加一些健全性检查。要么检查所有数字是否会导致有限数量的循环(accountrate!= 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,所以如果rate它太小并且新的值account至少没有变大,它可能永远不会改变0.005

于 2012-10-07T03:03:22.320 回答