一维数组习题(本人代码编译通不过,求高手指导)

一维数组练习题(本人代码编译通不过,求高手指导)
/*题目要求:
 * 定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。
 * 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。
提示:生成随机数:Math.randon(),返回值类型double;  
 四舍五入取整:Math.round(),返回值类型long。
*/

package com.atguifu.java;

public class Student {
private int number;
private int state;
private int score;


public static void main(String[] args){
Student[] stu = new Student[20];

for(int i=0; i<stu.length; i++){
stu[i].number = i+1;
stu[i].state = (int)Math.random();
stu[i].score = (int)Math.random();
}

for(int i=0; i<stu.length; i++){
if(stu[i].state == 3){
System.out.println(stu[i].number +" " + stu[i].state +" " +  stu[i].score);
}
}
}
}


求哪位大神给指导下错在哪里,谢谢!编译时出错信息如下:
Exception in thread "main" java.lang.NullPointerException
at com.atguifu.java.Student.main(Student.java:20)

------解决方案--------------------
空指针了;

可以添加一句;stu [i] = new Student();
并且你的Math.random()获取的是0到1之间的小数,所以结果永远是0,可以*10;
public class Student
{
private int number;
private int state;
private int score;

public static void main(String[] args)
{
Student[] stu = new Student[20];


for (int i = 0; i < stu.length; i++)
{
stu [i] = new Student();
stu[i].number = i + 1;
stu[i].state = (int) (Math.random()*10);
stu[i].score = (int) Math.random();
}

for (int i = 0; i < stu.length; i++)
{
if (stu[i].state == 3)
{
System.out.println(stu[i].number + " " + stu[i].state + " "
+ stu[i].score);
}
}
}
}

------解决方案--------------------
很明显异常是空引用。你光声明数组了,但是这个时候数组里面还没有放对象进去,肯定就空引用了。
你在20行之前加一句:Student s = new Student();就可以了