我是一名Java新手,我正在尝试通过递归函数部署斐波那契线,然后计算运行时间。 这是我设法编写的代码:
class nanoTime{
int fib(int n){
if(n==0) return 0;
if(n==1) return 1;
return this.fib(n-1)+this.fib(n-2);
}
public static void main(String[] args){
double beginTime,endTime,runTime;
int n=10;
beginTime = System.nanoTime();
n = this.fib(n);
endTime = System.nanoTime();
runTime = endTime-beginTime;
System.out.println("Run Time:" + runTime);
}
}
问题是,当我尝试将其转换为字节码时,我收到以下错误:
nanoTime.java:11: non-static variable this cannot be referenced from a static context
我想知道这是什么问题?!
答案 0 :(得分:12)
更改
n = this.fib(n);
到
n = fib(n);
并使方法fib
成为静态。
或者,改变
n = this.fib(n);
到
n = new nanoTime().fib(n);
答案 1 :(得分:3)
您需要实例化nanoTime
来调用实例方法,或者使fib
方法也是静态的。
答案 2 :(得分:3)
问题就在于消息所说的内容。您的main
方法为static
,这意味着它未链接到nanoTime
类的实例,因此this
并不意味着什么。您还需要制作fib
方法static
,然后使用nanoTime.fib(n)
。
答案 3 :(得分:3)
没有理由在代码中使用this
。
采取的步骤:
this
static
int fib(int n){
关键字
答案 4 :(得分:2)
# Name the class something else to avoid confusion between System.nanoTime and the name of your class.
class nanoTime1{
int fib(int n){
if(n==0) return 0;
if(n==1) return 1;
return this.fib(n-1)+this.fib(n-2);
}
public static void main(String[] args){
double beginTime,endTime,runTime;
int n=10;
beginTime = System.nanoTime();
# Instantiate an object of your class before calling any non-static member function
nanoTime1 s = new nanoTime1();
n = s.fib(n);
endTime = System.nanoTime();
runTime = endTime-beginTime;
System.out.println("Run Time:" + runTime);
}
}
答案 5 :(得分:1)
小心!在Java中,main必须在类定义中,但它只是程序的入口点,绝对不是对象/类的方法。
答案 6 :(得分:1)
将this.fib(n)
更改为:
nano obj = new nano();
n = obj.fib(n);
this
与类的实例相关联。静态方法不与类实例一起运行,而是与类本身一起运行。因此,要么将fib
方法更改为static
,要么将您调用fib
的行替换为上述两行。