空指针了;可以添加一句;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); } } } }
/*题目要求: * 定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。 * 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。 提示:生成随机数:Math.randon(),返回值类型double; 四舍五入取整:Math.round(),返回值类型long。 */ import java.util.ArrayList; import java.util.List; public class Student { private int number; private int state; private int score;
public Student() { }
public Student(int number, int state, int score) { this.number = number; this.state = state; this.score = score; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getState() { return state; } public void setState(int state) { this.state = state; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public static void main(String[] args){ List<Student> list = new ArrayList<Student>();
for(int i=0; i<20; i++){ Student student = new Student(); student.setNumber(i+1); int state = (int)(Math.random()*10); System.out.println("年级="+state); student.setState(state); student.setScore((int)(Math.random()*10)); list.add(student); } for (Student student : list) { if(student.getState()==3){ System.out.println("学号:"+student.getNumber()+" 年级:"+student.getState()+" 分数"+student.getScore()); }else{ System.out.println("不好意思,不存在3年级的学生!"); } } } }
不好意思,该包是用IDE时随意写上去的,可以不考虑这行代码!
这个问题牵扯到数组,Student[] stu = new Student[20]只是给数组开辟了20个student大小的空间,并没有初始化,还有就是Math.random是1之内的向下面就可以了(在你的代码基础上改动) 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() * 10); }
很明显异常是空引用。你光声明数组了,但是这个时候数组里面还没有放对象进去,肯定就空引用了。 你在20行之前加一句:Student s = 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);
}
}
}
}
/*题目要求:
* 定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。
* 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。
提示:生成随机数:Math.randon(),返回值类型double;
四舍五入取整:Math.round(),返回值类型long。
*/
import java.util.ArrayList;
import java.util.List;
public class Student {
private int number;
private int state;
private int score;
public Student() { }
public Student(int number, int state, int score) {
this.number = number;
this.state = state;
this.score = score;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} public int getState() {
return state;
} public void setState(int state) {
this.state = state;
} public int getScore() {
return score;
} public void setScore(int score) {
this.score = score;
} public static void main(String[] args){
List<Student> list = new ArrayList<Student>();
for(int i=0; i<20; i++){
Student student = new Student();
student.setNumber(i+1);
int state = (int)(Math.random()*10);
System.out.println("年级="+state);
student.setState(state);
student.setScore((int)(Math.random()*10));
list.add(student);
}
for (Student student : list) {
if(student.getState()==3){
System.out.println("学号:"+student.getNumber()+" 年级:"+student.getState()+" 分数"+student.getScore());
}else{
System.out.println("不好意思,不存在3年级的学生!");
}
}
}
}
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() * 10);
}
你在20行之前加一句:Student s = new Student();就可以了