黑马程序员技术交流社区

标题: 斐波那契数列这么写为什么有错 [打印本页]

作者: zzd0058    时间: 2014-4-4 15:10
标题: 斐波那契数列这么写为什么有错
        /* public static void main(String args[]){
                 int num=100 ;
                int arr[] = new int[num];
               
               
             arr[0]=0;
                 arr[1]=1;
                 for(int n=2;n<=num;n++){
                         arr[n]=arr[n-1]+arr[n-2];
                 }
                 for(int n=0;n<arr.length;n++){
                          System.out.print(arr[num]);
                 }
                System.out.println();
               
         }
        */

提示
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
        at javajichu.digui.main(digui.java:12)

作者: Monkey·D·Chas    时间: 2014-4-4 15:20
/* public static void main(String args[]){
                 int num=100 ;
                int []  arr = new int[num];//数组定义出错了
               
               
             arr[0]=0;
                 arr[1]=1;
                 for(int n=2;n<=num;n++){
                         arr[n]=arr[n-1]+arr[n-2];
                 }
                 for(int n=0;n<arr.length;n++){
                          System.out.print(arr[num]);
                 }
                System.out.println();
               
         }
        */
作者: 曲佳奇    时间: 2014-4-4 15:32
int arr[] = new int[100];
数组的范围是0-99 没有arr[100]
作者: alucard    时间: 2014-4-4 15:33
本帖最后由 alucard 于 2014-4-4 15:36 编辑

1楼说错了int arr[] = new int[num];和int[]  arr = new int[num];是一个意思,这是定义数组两种不同的格式,真正的错误是在运行的时候报数组下标越界的异常了。楼主你看你第一个for循环中,n是角标,num是数组的长度,n<=num这个错了,你的结果相当于n<=100,你的数组长度是100,角标是从0开始的,即0-99,所以应该改成for(int n=2;n<num-1;n++),完整代码如下,请看输出结果。这是你给的代码,我想你是要遍历输出斐波那契数组的,但还是代码写的有问题。
  1. public static void main(String args[])
  2.         {
  3.                 int num = 100 ;
  4.                 int arr[] = new int[num];
  5.                 arr[0] = 0;
  6.                 arr[1] = 1;
  7.                 for(int n=2;n<num-1;n++)
  8.                 {
  9.                         arr[n] = arr[n-1]+arr[n-2];
  10.                 }
  11.                 for(int n=0;n<arr.length;n++)
  12.                 {
  13.                         System.out.print(arr[num-1]);
  14.                 }
  15.                 System.out.println();
  16.         }
复制代码




作者: 水蓝    时间: 2014-4-4 15:36
楼主代码里面有以下两处错误:
  1. public static void main(String args[]) {
  2.                 int num = 100;
  3.                 int arr[] = new int[num];

  4.                 arr[0] = 0;
  5.                 arr[1] = 1;
  6.                
  7.                 //原代码:for(int n=2;n<=num;n++)
  8.                 //这边下标的值,取不到num,最大只能到num-1
  9.                 //所以应该把“小于等于”,该为“小于”
  10.                 for (int n = 2; n < num; n++) {
  11.                         arr[n] = arr[n - 1] + arr[n - 2];
  12.                 }
  13.                
  14.                 for (int n = 0; n < arr.length; n++) {
  15.                         //原代码:System.out.print(arr[num]);
  16.                         //在该程序中,num只表示数组长度,而不是循环变量
  17.                         //所以应该把num该为n
  18.                         System.out.print(arr[n]);
  19.                 }
  20.                 System.out.println();
  21.         }
复制代码





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