A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        //下面的没有实现斐波那契数列
        public static int feiBoNaQiShuLie(int[] arr){               
                int[] arr = new int[30];
                arr[0] = 1;
                arr[1] = 1;
                for(x=0;x<30;x++){
                        if(x==0||x==1){
                                arr[x]=1;
                        }else
                     arr[x] = arr[x-1]+arr[x-2];
                     return arr[x];
                }       
        }
大神帮忙改下,想定义一个数组类的函数
我菜鸟刚接触,感觉思路没错和度娘上的有出,不知道怎么改,谢谢,纠结一下午了,也看了好几个斐波那契数列的代码,但就是想改对了,看看自己哪里错了

15 个回复

倒序浏览
你的arr[x+2] = arr[x]+arr[x+1],要不你的x肯定会越界异常的

点评

假如...打错字啦  发表于 2015-5-25 20:54
arr[x+2],加入x为2 就是arr[4]=arr[2]+arr[3] 但是arr[2],arr[3]并不知道数值,而且当x=29的时候会变成arr[31]=arr[29]+arr[30] 这样才会越界 所以还是应该用源代码...  发表于 2015-5-25 20:53
回复 使用道具 举报
你是要把数列存在数组里面吗,那样的话你的这个函数里面直接实例化传进来的数组就好,为什么还要重新声明呢,那样肯定会报错的。还有就是程序循环结束了没有返回语句,这个也是不行的。建议你如果是想把数据存在数组里面就把函数返回类型改为void,如果是想每次返回数列中下一个数,那就没必要传数组进来了。
回复 使用道具 举报
class MyTest
{
     public static void main(String[] args) {
                 int[] arr = new int[30];
                 feiBoNaQiShuLie(arr);
                 for(int i:arr){
                         System.out.print(i+", ");
                 }
        }   
     public static void feiBoNaQiShuLie(int[] arr){               
        
         arr[0] = 1;
         arr[1] = 1;
         for(int x=0;x<30;x++){
                 if(x==0||x==1){
                         arr[x]=1;
                 }else
              arr[x] = arr[x-1]+arr[x-2];
         }        
}
}
回复 使用道具 举报
首先你的这个方法中,已经传了一个int类型的数组了,就没有必要new int[30]再定义一遍了,这样会局部变量名重复  还有你的for循环中,x没有定义, 所以系统无法识别,这里你的x应该是arr数组的索引 所以应该定义成int变量  你这个方法,只是给arr[30]这个数组赋值(arr[0]赋值1 arr[1]赋值1 arr[2]赋值2 等等),没有比较添加return语句,而且你的return语句位置也不对,所以应该把这个方法的返回值改为void  然后在main方法里调用这个方法,赋值完毕,然后遍历这个arr[30]数组就可以了  遍历出的数组排列可能不太美观,但是结果应该就是你想得到的  你可以用普通for再修改一下,如果当选29的时候去掉那个逗号之类的.  你这个方法的思路没有问题,就是一些语法的理解上还不太到位,多写写代码 熟练一点就可以啦~  
回复 使用道具 举报
没有必要添加return语句 打错字了
回复 使用道具 举报
  1. class  feiBo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                   int[] arr = new int[30];
  6.                  
  7.                   StringBuffer nb= feiBoNaQiShuLie(arr,30);

  8.                   System.out.println(nb.toString());
  9.         }

  10.         public static StringBuffer feiBoNaQiShuLie(int[] arr,int y){               
  11.               
  12.                 StringBuffer sb=new StringBuffer();//定义一个容器来承载arr[x]的值
  13.         for(int x=0;x<y;x++)
  14.                 {
  15.                         if(x==0||x==1)
  16.                         {
  17.                                 arr[x]=1;
  18.                         }else
  19.                         arr[x] = arr[x-1]+arr[x-2];
  20.                                           
  21.                         sb.append(arr[x]+",");
  22.                 }  
  23.                  return sb;
  24.    }
  25. }
复制代码
回复 使用道具 举报
1.首先你的斐波那契数列的初始值不正确,你自己看不看你的斐波那契数列的第一个和第二个值是多少
2.你的返回值不对,能放在数组里面么?
//我没有弄返回值,直接在主方法里面调用就行
public static void feibo(int[] arr){               
        int[] array = new int[30];
        array[0] = 0;
        array[1] = 1;
        for(int x=2;x<30;x++)
        {
                array[x] = array[x-1]+array[x-2];
        }
        for(int i=0;i<30;i++)
                {
                        System.out.println(array[i]);
                }

}
回复 使用道具 举报
先谢谢各位大神了,我去改改,验证下

点评

不用StringBuffer容器也是可以的,可以直接用数组,凡是打印的时候需要再遍历,比较麻烦  发表于 2015-5-26 17:08
ok了么?  发表于 2015-5-26 17:04
回复 使用道具 举报
791180016 发表于 2015-5-25 21:02
先谢谢各位大神了,我去改改,验证下

ol是ol,改的和我想的不太一样了,还需要好好学习啊
回复 使用道具 举报
791180016 发表于 2015-5-26 21:50
ol是ol,改的和我想的不太一样了,还需要好好学习啊

不太明白你想做什么,简单改改,看看是不是你想要的效果,返回一个int 数组
        public static int[] MingZi( int[] arr)
        {           
//            int[] arr = new int[30]; //跟函数的参数重复
            int x=0;
            arr[0] = 1;
            arr[1] = 1;
            for(x=0;x<30;x++){
                   if(x==0||x==1)
                           arr[x]=1;
                   else
                           arr[x] = arr[x-1]+arr[x-2];
            }
            return arr;
}返回值类型注意 是个数组
回复 使用道具 举报
错的比较多 可以私聊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马