在静态方法中调用非静态方法
Calling non static method in static method
我的代码有点问题。我试图找到运行时来与我为该问题准备的一些数学进行比较。我有一个特别的方法,我正在测试它是这样的:
public static int foo(int n, int k){
long startTime = System.nanoTime();
if(n<=k){
long endTime = System.nanoTime();
System.out.println("checkFoo");
System.out.println("start time: " +startTime);
System.out.println("end time: " +endTime);
return 1;
}
else{
return foo(n/k,k) + 1;
}
}
我按以下方式在我的主要方法中测试此代码:
public static void main(String[] args){
foo(1, 1);
foo(5, 1);
foo(10, 1);
foo(100, 1);
}
我收到一个错误
Exception in thread "main" java.lang.WhosebugError
然后它重复了这行:
at Problem3.foo(Problem3.java:42)
我想知道这是否与 foo 应该 return 一个 int 的事实有关,也许我只是没有正确调用该函数。如果是这样,调用此函数的正确方法是什么,以便它也打印出我需要的信息?还是这个错误与我理解的完全不同?
你只有一个无限递归循环:
foo(5, 1): n = 5, k = 1
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
...
当你调用这个 foo(5, 1);
时,参数是 5
和 1
这意味着 foo
if(5<=1)
中的逻辑失败,因此 if(5<=1)
中的代码 else
将执行,即 return foo(5/1,1) + 1;
这将一次又一次地调用 foo
,然后重复,然后重复...导致 WhosebugError
foo(5, 1);
总是以 foo
结束调用,所以你得到 WhosebugError
尝试结束此通话
如果问题是错误的 return 类型,您将得到一个编译错误。当该方法用完所有已分配的内存时,会导致计算器溢出错误。有关如何导致 Whosebug 错误的更多信息,请阅读:What is a WhosebugError?
您似乎有一个无限循环函数调用,这导致了 JVM 的堆溢出。尝试包括一些输入验证以防止出现这种情况。
您的代码 运行 处于无限循环中,但您可以像下面那样捕捉它
public static int foo(int n, int k){
long startTime = System.nanoTime();
if(n<=k){`enter code here`
long endTime = System.nanoTime();
System.out.println("checkFoo");
System.out.println("start time: " +startTime);
System.out.println("end time: " +endTime);
return 1;
}
else{
try {
return foo(n/k,k) + 1;
} catch (WhosebugError e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 1;
}
}
}
我的代码有点问题。我试图找到运行时来与我为该问题准备的一些数学进行比较。我有一个特别的方法,我正在测试它是这样的:
public static int foo(int n, int k){
long startTime = System.nanoTime();
if(n<=k){
long endTime = System.nanoTime();
System.out.println("checkFoo");
System.out.println("start time: " +startTime);
System.out.println("end time: " +endTime);
return 1;
}
else{
return foo(n/k,k) + 1;
}
}
我按以下方式在我的主要方法中测试此代码:
public static void main(String[] args){
foo(1, 1);
foo(5, 1);
foo(10, 1);
foo(100, 1);
}
我收到一个错误
Exception in thread "main" java.lang.WhosebugError
然后它重复了这行:
at Problem3.foo(Problem3.java:42)
我想知道这是否与 foo 应该 return 一个 int 的事实有关,也许我只是没有正确调用该函数。如果是这样,调用此函数的正确方法是什么,以便它也打印出我需要的信息?还是这个错误与我理解的完全不同?
你只有一个无限递归循环:
foo(5, 1): n = 5, k = 1
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
...
当你调用这个 foo(5, 1);
时,参数是 5
和 1
这意味着 foo
if(5<=1)
中的逻辑失败,因此 if(5<=1)
中的代码 else
将执行,即 return foo(5/1,1) + 1;
这将一次又一次地调用 foo
,然后重复,然后重复...导致 WhosebugError
foo(5, 1);
总是以 foo
结束调用,所以你得到 WhosebugError
尝试结束此通话
如果问题是错误的 return 类型,您将得到一个编译错误。当该方法用完所有已分配的内存时,会导致计算器溢出错误。有关如何导致 Whosebug 错误的更多信息,请阅读:What is a WhosebugError?
您似乎有一个无限循环函数调用,这导致了 JVM 的堆溢出。尝试包括一些输入验证以防止出现这种情况。
您的代码 运行 处于无限循环中,但您可以像下面那样捕捉它
public static int foo(int n, int k){
long startTime = System.nanoTime();
if(n<=k){`enter code here`
long endTime = System.nanoTime();
System.out.println("checkFoo");
System.out.println("start time: " +startTime);
System.out.println("end time: " +endTime);
return 1;
}
else{
try {
return foo(n/k,k) + 1;
} catch (WhosebugError e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 1;
}
}
}