我用 Java 写下了一个递归程序(为了好玩),其中有几件事不清楚:
public class methodTest
{
public static double methodTest()
{
System.out.println("qwerty") ; // sign that this method is called
methodTest obj1 = new methodTest() ; // creating an object (perhaps unnessary)
System.out.println(methodTest.methodTest()) ; // ??!
return methodTest() ; // returning the same function
}
}
double
,我的 BlueJ 编译器在返回方法时没有显示语法错误?methodTest()
之前)并在方法中递增它,但它显示“无法访问的语句”]System.out.println(methodTest.methodTest())
语句时在做什么?cannot find symbol - variable obj1
替换(在System.out.println(methodTest.methodTest())
中).methodTest
时,编译器会给出语法错误(.obj1
)?
这是解决这个问题的一种方法。
备注:
public class MySampleClass
{
private static double methodTestPrivate(int callIndex)
{
//Check for terminating condition
if (callIndex >= 10)
return 42.0;
//Recursive call
return methodTestPrivate(callIndex+1);
}
public static double methodTest()
{
return methodTestPrivate(0);
}
}
public class MyProgram
{
public static void main(String[] args)
{
System.out.print(MySampleClass.methodTest());
}
}
Thread.currentThread().getStackTrace()
并计算您的方法出现在堆栈中的次数。更简单的方法是传递一个从 0 开始的计数器参数,在任何递归调用中递增它并添加一个条件以在达到您的限制时停止。methodTest.methodTest()
并打印它的返回值methodTest
是静态方法,不能关联实例而obj1
是实例。