如何让我的程序计算方法被调用的次数?

时间:2013-04-25 23:32:25

标签: java recursion

好的,我正在自学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);
    }
  }
}
  • 扎克

5 个答案:

答案 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));
  }