黑马程序员技术交流社区

标题: 菜鸟求助大神指点,我下面的代码怎么改改就对了,斐... [打印本页]

作者: 791180016    时间: 2015-5-25 19:37
标题: 菜鸟求助大神指点,我下面的代码怎么改改就对了,斐...
        //下面的没有实现斐波那契数列
        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];
                }       
        }
大神帮忙改下,想定义一个数组类的函数
我菜鸟刚接触,感觉思路没错和度娘上的有出,不知道怎么改,谢谢,纠结一下午了,也看了好几个斐波那契数列的代码,但就是想改对了,看看自己哪里错了
作者: l598790586    时间: 2015-5-25 20:01
你的arr[x+2] = arr[x]+arr[x+1],要不你的x肯定会越界异常的
作者: 存在感很差    时间: 2015-5-25 20:25
你是要把数列存在数组里面吗,那样的话你的这个函数里面直接实例化传进来的数组就好,为什么还要重新声明呢,那样肯定会报错的。还有就是程序循环结束了没有返回语句,这个也是不行的。建议你如果是想把数据存在数组里面就把函数返回类型改为void,如果是想每次返回数列中下一个数,那就没必要传数组进来了。
作者: 君子无醉    时间: 2015-5-25 20:36
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];
         }        
}
}

作者: 君子无醉    时间: 2015-5-25 20:47
首先你的这个方法中,已经传了一个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的时候去掉那个逗号之类的.  你这个方法的思路没有问题,就是一些语法的理解上还不太到位,多写写代码 熟练一点就可以啦~  
作者: 君子无醉    时间: 2015-5-25 20:49
没有必要添加return语句 打错字了
作者: 支离疏者    时间: 2015-5-25 20:49
  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. }
复制代码

作者: 南朝小和尚    时间: 2015-5-25 20:52
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]);
                }

}
作者: 791180016    时间: 2015-5-25 21:02
先谢谢各位大神了,我去改改,验证下
作者: 791180016    时间: 2015-5-26 21:50
791180016 发表于 2015-5-25 21:02
先谢谢各位大神了,我去改改,验证下

ol是ol,改的和我想的不太一样了,还需要好好学习啊
作者: 微凉的暮色    时间: 2015-5-26 22:47
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;
}返回值类型注意 是个数组

作者: wuyaxing    时间: 2015-7-16 23:34
错的比较多 可以私聊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2