为什么这会给我一个无限循环?

时间:2012-10-07 02:57:38

标签: java

我正在查看用于计算投资的代码,直到它加倍并且我收到了一个我似乎无法解决的无限循环。任何人都可以弄清楚为什么这会给我一个无限循环?我已经完成了自己,但我似乎无法找到问题所在。提到的“期间”是每年多少次利息复合。

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 个答案:

答案 0 :(得分:1)

你应该添加一些健全性检查。要么检查所有数字是否会产生有限数量的循环(accountrate!= 0,也许是其他一些东西),或者更简单地说,如果你循环次数多于合理(例如1000)。我的猜测是rate0导致帐户没有增加,因此会永远循环。

您有计算错误:

account = interest + base;

据推测,这应该是:

account = account + interest;

另外,你确定要进行int演员吗?

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

你显然丢掉了小于1美分的价值。但是,如果兴趣太小,你就不会有任何改变。

答案 1 :(得分:1)

而不是做

account =interest +base

你应该

account = interest +account

答案 2 :(得分:0)

它可能永远循环的原因是double的{​​{1}}计算通过强制转换为account而被有效截断,因此如果int太小,它可能永远不会改变并且rate的新值不会至少增加account