While循环计算问题



我目前正在编写一个Java程序(用于学校),当用户输入帐户的起始余额时,该程序将打印两条语句。

例如,如果用户输入$10,000,将会有两条语句同时输出。一份告诉他们他们的账户需要多长时间才能达到100,000美元,另一份告诉他们什么时候达到1,000,000美元。

现在我有了代码,我将在下面发布,它可以工作(它给我一个接近所需的结果),但是,我遇到的问题是数学本身。我将发布代码并解释:

public static void main(String[] args) {
int startBalance = 0;
int storedBalance = 0;
int years = 0;
try (Scanner stdln = new Scanner(System.in)) {
System.out.println("Please enter your starting balance: ");
startBalance = stdln.nextInt();
}

while (storedBalance < 100000)
{   
storedBalance = startBalance + (storedBalance * 2) ;
++years;
} 
System.out.println("It will take " + years + " year(s) for your bank balance to reach " + storedBalance + ".");

while (storedBalance < 1000000)
{   
storedBalance = startBalance + (storedBalance * 2);
++years;
} 
System.out.println("It will take " + years + " year(s) for your bank balance to reach " + storedBalance + ".");
}

}

因此,理论上,startBalance应该翻倍,直到它达到$100,000或更多,在这种情况下,计算达到$100,000所需的年份并打印语句(与第二个While循环相同,但有$1,000,000)。因此,如果用户输入$10,000,则第一个While循环的storedBalance变量应该是$ 20,000,$ 40,000,$ 80,000,$160k,但根据我目前的数学计算,它是$10,000,$ 30,000,$ 70,000,$150k。

我也试过了:

storedBalance = (startBalance * 2) + storedBalance;

,它的工作,但问题是,而不是加倍的数量(10k到20k, 20k到40k, 40k到80k,等等),它只是增加20k到前面的数字,这是有意义的,因为在该语句中的逻辑,如果startBalance是10k是(10,000 * 2)+ storedBalance,所以括号内的逻辑保持不变,不调整数字的变化,但存储的余额随着每一个循环增加。

所以我知道少了一些东西,因为第一年= 1万美元,而它应该是2万美元,但是到达那里所需的年份是正确的。我有一种感觉我的数学是不正确的,因为我没有将初始值加倍,我只是将storedBalance添加到它。

任何和所有的回复都是非常感谢的。提前谢谢你。

应该在while循环之外初始化storedBalance等于startBalance。然后在while循环中,您只需在每次循环迭代(年)中使用storedBalance = storedBalance * 2;storedBalance的值加倍。

public static void main(String[] args) {
int startBalance = 0;
int years = 0;
try (Scanner stdln = new Scanner(System.in)) {
System.out.println("Please enter your starting balance: ");
startBalance = stdln.nextInt();
}
int storedBalance = startBalance;
while (storedBalance < 100000)
{   
storedBalance *= 2;
++years;
} 
System.out.println("It will take " + years + " year(s) for your bank balance to reach " + storedBalance + ".");
storedBalance = startBalance;
years = 0;
while (storedBalance < 1000000)
{   
storedBalance *= 2;
++years;
} 
System.out.println("It will take " + years + " year(s) for your bank balance to reach " + storedBalance + ".");

}

最新更新