這樣改:
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); 
}
}

解决方案 »

  1. 显示
    ff.java:10:missing return statement.
      

  2. 别忘了还有return.
    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;
    }
    }
    }
      

  3. 在main函数中,因为main函数是静态函数,是不能在静态函数中直接使用未静态函数。
    如果一定要使用,
    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); 
    }
    }
     
      

  4. 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;
      else
      temp=fff(n-1)+fff(n-2);
      System.out.println(temp); 
    }
    }
      

  5. 有点错误。改为
    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;
    }
    }
    }
      

  6. 正如你所看到的,java程序是以类的形式组织的.
    你会犯这个错误,是因为你不理解  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关键字非常有帮助.
      

  7. weiming_zhang(weiming) 非常感谢!!!
      

类似问题 »