为什么在循环停止时让我的Java获胜并让我程序终止?

时间:2014-10-16 17:33:32

标签: java loops while-loop

import java.util.*;

public class Investment 
{

    public static int years=0;
    public static void main(String[] args) 
    {
        Scanner kbd = new Scanner(System.in);
        System.out.println("Please enter an integer representing the whole dollar value of your initial investment: $");
        int startBal=kbd.nextInt();
        System.out.println("Please enter the whole number percentage, excluding the percent sign, of the interest rate on the investment.");
        int interestRate=kbd.nextInt()/100;
        int endBal=startBal*2;
        int currentBal=startBal;
        while (endBal>=currentBal)
        {
            currentBal=currentBal*interestRate+currentBal;
            years++;
        }
        System.out.println("It will take "+years+" years to double your investment.");
    }
}

我看到的输出是:

请输入一个表示初始投资的全部美元价值的整数:$ 10000个
请输入投资利率的整数百分比,不包括百分号 5

“10000”和“5”是我的输入。程序应该用答案“15”打印我的最终陈述,但是不做任何事情,并且不会终止。

5 个答案:

答案 0 :(得分:3)

int interestRate=kbd.nextInt()/100;

由于interestRateint,因此它会向下舍入为零。

所以这一行:

currentBal=currentBal*interestRate+currentBal;

解析为:

=> currentBal=currentBal*0+currentBal;
=> currentBal=0+currentBal;
=> currentBal=currentBal;

因此值永远不会增加,所以永远不会达到其初始值的两倍,因此无限循环。

您必须将该行替换为:

double interestRate=kbd.nextInt()/100.0;

答案 1 :(得分:1)

您的 interestRate 被声明为int,因此它将被设置为0.

您应该将所有值声明为双精度数,因为我们正在谈论我们想要确切的资金:)

答案 2 :(得分:1)

您有int个利率,除以100后,变为0。设为double并使用double文字100.0进行除法,以强制进行浮点除法。

double interestRate=kbd.nextInt()/100.0;

currentVal变量也必须是double

我的输出结果如下:

Please enter an integer representing the whole dollar value of your initial investment: $
10000
Please enter the whole number percentage, excluding the percent sign, of the interest rate on the investment.
5
It will take 15 years to double your investment.

这将让程序完成。但通常是it's not a good idea to use a double to store money

答案 3 :(得分:0)

你做整数除法5/100 = 0余数5.因此在你的计算中你乘以0所以你的当前余额将始终为0并且永远不会达到最终余额。尝试使用双倍的利率而不是整数。

答案 4 :(得分:0)

while (endBal>=currentBal)
{
    currentBal=currentBal*interestRate+currentBal;
    years++;
}

当然它永远不会终止,你只是递增几年但是while上的变量是endBal和currentBal