为什么会是数组下标超限~~~,为什么又空指针~~

public class test {

public static void main(String[] args){


    for (int i = 0; i < 2; i++) {

        Scanner in=new Scanner(System.in);
        System.out.println("请输入成绩");
        int[] a=new int[i];
        a[i]=in.nextInt();
        System.out.println("成绩是"+a[i]);

    }}}

    上面这种写法报数组下标超限的错。。。

    public class BlackDemo {

static int[] b;
public static void main(String[] args){

    for (int i = 0; i < 2; i++) {

        Scanner in=new Scanner(System.in);
        System.out.println("请输入成绩");
        b[i]=in.nextInt();
        System.out.println("成绩是"+b[i]);

    }

}

}
这个报空指针。。。难道静态的全局变量,在for循环中被复制了还不能更改?

int[] a=new int[i];
a[i]=in.nextInt();
i初始值是0,数组长度是0,a[0]就会数组越界啊

static int[] b; 还没有分配空间 就是null啊

http://developer.51cto.com/art/200906/128274.htm

第一个。你在循环中声明了一个0长度的数组。。当然超限了。。

第二个。。你并没有初始化你的b数组啊。。当然是空指针了。。。

a[0]不能代表一个长度么~~我的理解是比如a[3],那么他的值分别是a[0] a[1],a[2]~~~

你那个数组声明的有问题。。不应该放在里面。。第一次就是空指针。。因为数组没有分配内存空间。。所以无法存放数,所以就是空了!!

数组的下标是从0开始的,如int【】 a=new int[3],那么它就有三个元素,分别为a[0],a[1],a[2]

当进入第一次循环是i=0;此时你生声明的数组长度为0;肯定报错,应该改为1开始,在着数组下标是从0开始的,你定义a【i】数组。那么a【i】=。。这句话就是错的。超界了