好的,我正在自学java,我正在尝试编写一个递归方法,可以计算它被调用/使用的次数。到目前为止,这是我的代码:
public class FinancialCompany
{
public static void main(String[] args)
{
StdOut.println("Enter your monthly investment: ");
double money= StdIn.readDouble();
double total = Sum(money);
Months();
StdOut.printf("you have reached an amount of $%8.2f", total);
StdOut.println();
}
public static double Sum(double money)
{
double total = (money * 0.01) + money;
if(total >= 1000000)
{
return total;
}
else
{
total =(money * 0.01) + money;
return Sum(total);
}
}
public static int counter = 0;
public static void Months()
{
counter++;
StdOut.println("It should take about " + counter + " month(s) to reach your goal of $1,000,000");
}
}
这是输出:
Enter your monthly investment: 1000 (I chose 1000)
It should take about 1 month(s) to reach your goal of $1,000,000
you have reached an amount of $1007754.58
每次我跑这是打印出最终数量,但我想告诉我到达那里需要多少个月,但所有打印出的都是1个月。任何帮助将不胜感激!
**
**
public class FinancialCompany
{
public static int counter = 0;
public static void main(String[] args)
{
StdOut.println("Enter your monthly investment: ");
double money= StdIn.readDouble();
double investment = money;
double total = Sum(money, investment);
StdOut.println("It should take about " + counter + " month(s) to reach your goal of $1,000,000");
}
public static double Sum(double money, double investment)
{
counter++;
double total = (money * 0.01) + money;
if(total >= 1000000)
{
return total;
}
else
{
return Sum(total + investment ,investment);
}
}
}
答案 0 :(得分:2)
难道你不能在方法之外创建一个像counter这样的全局变量吗? 有点像这样。
public class testThingy {
public static int counter = 0;
/* main method and other methods here */
}
每次调用方法时(在您想要计算的方法中),只需将1添加到计数器,它应该更新全局变量。
答案 1 :(得分:0)
两种方式:
1)是有一个存在于方法之外的变量。 (例如,如果方法存在于对象上,则可以将其设置为对象的变量。)在方法的开头,++variable
。然后你可以看到它结束的价值。
2)是返回值,或返回值的一部分,是所有孩子的通话次数。如:
- 如果您不给自己打电话,请返回1.
- 如果您自己打电话,请返回所有自我调用的所有返回值的总和(如果您还希望通过树中途调用方法的调用,则返回+1)
答案 2 :(得分:0)
因为每次执行应用程序时只调用Months()一次,所以计数器只增加一次!如果要在应用程序的执行之间保持计数器,则必须在应用程序结束时保存该值,并在再次运行应用程序时再次将其加载。
答案 3 :(得分:0)
Month()
只会在您的代码中调用一次,因此它会看到counter == 0
,然后递增给出counter == 1
。这是打印的值。
因此,您的counter++
位置错误。它应位于Sum()
方法的顶部。由于这是递归调用的方法,因此这是计数器应该递增的位置。
现在,当Month()
被调用时,它将具有正确的值。
答案 4 :(得分:0)
我相信这应该能满足您的需求。
public static void main(String[] args)
{
StdOut.println("Enter your monthly investment: ");
double money= StdIn.readDouble();
int months = 0;
while(money < 10000){
money += invest(money);
months++;
}
StdOut.println("It should take about " + String.valueOf(months) + " month(s) to reach your goal of $1,000,000");
StdOut.printf("you have reached an amount of $%8.2f", money);
StdOut.println();
}
private static double invest(double investment){
return (investment + (investement * 0.01));
}