這樣改:
public class ff
{
public static void main(String args[])
{
fff(5);
}static long fff(int n)
{
long temp;
if(n==0 ¦¦ n==1)
temp=n;
else
temp=fff(n-1)+fff(n-2);
System.out.println(temp);
}
}
public class ff
{
public static void main(String args[])
{
fff(5);
}static long fff(int n)
{
long temp;
if(n==0 ¦¦ n==1)
temp=n;
else
temp=fff(n-1)+fff(n-2);
System.out.println(temp);
}
}
ff.java:10:missing return statement.
class ff{
public static void main(String args[])
{
fff(5);
}static long fff(int n)
{
long temp;
if(n==0 || n==1)
{
temp=n;
return 0;
}
else
{
temp=fff(n-1)+fff(n-2);
return 0;
}
}
}
如果一定要使用,
1)把该函数定义为静态函数 同zhuzhichao(竹之草)
2)使用一个该类的实例来调用函数。
public class ff
{
public static void main(String args[])
{
ff a = new ff();
a.fff(5);
}static long fff(int n)
{
long temp;
if(n==0 ¦¦ n==1)
temp=n;
else
temp=fff(n-1)+fff(n-2);
System.out.println(temp);
}
}
{
public static void main(String args[])
{
ff a = new ff();
a.fff(5);
}long fff(int n)
{
long temp;
if(n==0 ¦¦ n==1)
temp=n;
else
temp=fff(n-1)+fff(n-2);
System.out.println(temp);
}
}
public class ff
{
public static void main(String args[])
{
ff a = new ff();
a.fff(5);
} long fff(int n)
{
long temp;
if(n==0 ¦¦ n==1)
{
temp=n;
return 0;
}
else
{
temp=fff(n-1)+fff(n-2);
return 0;
}
}
}
你会犯这个错误,是因为你不理解 static 关键字的含义.static 告诉编译器,类中的这个域是归类所有的,是这个类的所有实例(也就是类的对象,Object)所共有的.先看 main 函数的申明:
public static void main(String args[])
这个方法是class ff类的所有对象所共有的,因为它申明为static.再来看fff(int n)的定义: long fff(int n),它没有申明为static,也就是说,它是属于某个特定的对象的.而在main方法中,你调用了fff(int n),这是非法的.打个比方吧,class ff 就好比是工厂铸造车间的模具,可以用它来制造铸件(类的实例),现在你只是做好了模具(只是定义了类),你想想,你能改变某个铸件的属性(好比说要磨光它)吗?铸件还不存在呀!楼上有人已经解决了这个问题,他的方法是将 fff(int n)也声明为 static ,这样一来,它是属于整个类的所有对象的,就好比你去磨光那个模具,虽然铸件不存在,但这是可行的.并且,这个行为势必会影响所有的铸件(所有对象),所有铸件都会变光滑.还有一个方法解决上述问题:
public class ff{
public static void main(String args[]){
ff ffObject=new ff(); //实例化一个对象,好比是铸造一个铸件,这样,
~~~~~~~~~~~~~~~~~~~~~ //你就可以磨光这个铸件了.
ffObject.fff(5); //这就相当于磨光这个铸件了
~~~~~~~~~~~~~~~~~
}
long fff(int n){ //你已经声明这个方法要返回一个long数值,可你没有实现
long temp;
if(n==0 || n==1)
temp=n;
else
temp=fff(n-1)+fff(n-2);
System.out.println(temp); //这不等同于返回值
~~~~~~~~~~~~~~~~~
return temp;
~~~~~~~~~~~~
}
}
改动之处已经标出.另外,我看你是个新手,学习语法固然重要,更重要的是要养成好的编程习惯,程序的代码一定要缩进,你可以看看我给你改的代码是怎么排版的.上面的例子不一定恰当,可是,我觉得,这对理解static关键字非常有帮助.