输入为零时ArrayIndexOutOfBoundException

时间:2015-10-31 00:48:05

标签: java

这是我计算n的Fibonacci的代码。当n = 0ArrayIndexOutOfBoundException被提升时,我无法得到。在fibn = 0功能,它应return 0。这是什么原因?

import java.util.Scanner;
public class Fibonacci {
    public static int fib(int n) {
        int[] t = new int[n + 1];
        t[0] = 0;
        t[1] = 1;
        for (int i = 2; i < t.length; i++) {
            t[i] = t[i - 1] + t[i - 2];
        }
        return t[n];
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        for (;;) {
            if (!in.hasNextInt()) {
                in.next();
                continue;
            }
            int n = in.nextInt();
            if (n >= 0) {
                System.out.println(fib(n));
            } else {
                System.out.println("Invalid input!");
            }
            break;

        }
    }
}

2 个答案:

答案 0 :(得分:3)

当n = 0时,数组int[] t = new int[n + 1];仅包含1个元素。但是,您尝试分配两个元素:

t[0] = 0; t[1] = 1;

答案 1 :(得分:0)

这段代码可以简单得多!为什么它会给你这个错误,因为当你输入0时,数组是由元素(0 + 1)创建的,所以1元素。然后尝试给出两个元素值。下面是使用递归的斐波那契序列的一个例子

public int fibonacci(int n){
    if(n == 0)
        return 0;
    else if(n == 1)
        return 1;
    else
        return fibonacci(n - 1) + fibonacci(n - 2);
}