Java对象数组练习--MiddleSchoolStudent

        已知一个MiddleSchoolStudent(初中生)类,有学号、性别、年龄、年级、成绩5个属性。

由多个 MiddleSchoolStudent对象组成的数组为students,下面记录一下对students数组的一些操作。

这里使用了for循环、 Comparator、Stream API部分用法。

序: 已知MiddleSchoolStudent类如下

public class MiddleSchoolStudent {

	private int idNumber; // 学生番号
	private String gender; // 性別
	private int age; // 年齢
	private int grade; // 学年
	private int score; // 成績
	
	public MiddleSchoolStudent(int idNumber) {
		this.idNumber = idNumber;
	}
	 
    public String getInfo() {
    	return "学生番号:" + idNumber +
               "\t性别:" + gender +
               "\t年齢:" + age +
               "\t学年:" + grade +
               "\t成绩:" + score;
    }
    
	// getter&setter
	public int getIdNumber() {
		return idNumber;
	}

	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getGrate() {
		return grade;
	}
	public void setGrate(int grade) {
		this.grade = grade;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	
}

一、创建由多个 MiddleSchoolStudent对象组成的数组students

        当你需要创建一个班级的时候,就需要很多student对象,我们可以将这个班级创建为一个包含很多个学生的数组students。

例如这个班级有10个学生,学号为1到10,剩下的性别、年龄、年级、成绩都先由随机数生成。

写一个创建并返回学生数组的方法, 参数为你要创建的学生人数:

	
	public static MiddleSchoolStudent[] creatStudents(int count) {
		MiddleSchoolStudent[] students = new MiddleSchoolStudent[count];
		Random random = new Random();

		for(int i = 0; i < count; i++) {
			MiddleSchoolStudent student = new MiddleSchoolStudent(i + 1);
			
			// 性別,男女随机
			boolean isMale = random.nextBoolean();
			String gender = isMale ? "男" : "女";
			student.setGender(gender);

			// 年齢,13~15之间随机整数
			int age = random.nextInt(3) + 13;
			student.setAge(age);
			
			// 学年,1~3之间随机整数
			int grade = random.nextInt(3) + 1;
			student.setGrate(grade);
			
			// 成績, 0~100之间随机整数
			int score = random.nextInt(101);
			student.setScore(score);
			
			students[i] = student;
		}
			
		return students;
			

二、筛选出所有3年级的学生,并打印信息

遍历+if条件:

public static void main(String[] args) {
		
		MiddleSchoolStudent[] students = creatStudents(10);
		
		for (MiddleSchoolStudent student : students) {
			if (student.getGrate() == 3) {
				System.out.println(student.getInfo());
			}
		}
}

运行结果: 

学生番号:6 性别:女 年齢:13 学年:3 成绩:44

学生番号:7 性别:男 年齢:15 学年:3 成绩:1

学生番号:8 性别:男 年齢:15 学年:3 成绩:72

学生番号:10 性别:女 年齢:13 学年:3 成绩:48

三、将所有学生按照分数的属性进行排序,并遍历打印信息

1、将数组转化为列表
2、使用Comparator+Lambda表达式进行简化的排序
3、用迭代器进行打印
public static void main(String[] args) {
		
		MiddleSchoolStudent[] students = creatStudents(10);

		List<MiddleSchoolStudent> studentList = Arrays.asList(students);
		Collections.sort(studentList, Comparator.comparingInt(MiddleSchoolStudent::getScore));
		
		Iterator<MiddleSchoolStudent> iterator = studentList.iterator();
		while (iterator.hasNext()) {
			MiddleSchoolStudent student = iterator.next();
		    System.out.println(student.getInfo());
		}
}
		

运行结果: 

学生番号:7 性别:男 年齢:15 学年:3 成绩:1

学生番号:6 性别:女 年齢:13 学年:3 成绩:44

学生番号:3 性别:男 年齢:13 学年:1 成绩:46

学生番号:10 性别:女 年齢:13 学年:3 成绩:48

学生番号:5 性别:女 年齢:13 学年:1 成绩:59

学生番号:8 性别:男 年齢:15 学年:3 成绩:72

学生番号:9 性别:男 年齢:15 学年:1 成绩:78

学生番号:1 性别:女 年齢:15 学年:2 成绩:79

学生番号:4 性别:男 年齢:13 学年:1 成绩:84

学生番号:2 性别:女 年齢:15 学年:2 成绩:98

四、将所有学生按照性别的属性,进行分别打印信息

1、将数组转化为列表
2、使用 Stream API
public static void main(String[] args) {
		
		MiddleSchoolStudent[] students = creatStudents(10);

		List<MiddleSchoolStudent> studentList = Arrays.asList(students);

		studentList.stream()
            .filter(student -> student.getGender().equals("男"))
            .forEach(student -> System.out.println("男: " + student.getInfo()));

		studentList.stream()
		    .filter(student -> student.getGender().equals("女"))
		    .forEach(student -> System.out.println("女: " + student.getInfo()));

	}

运行结果: 

男: 学生番号:7 性别:男 年齢:15 学年:3 成绩:1

男: 学生番号:3 性别:男 年齢:13 学年:1 成绩:46

男: 学生番号:8 性别:男 年齢:15 学年:3 成绩:72

男: 学生番号:9 性别:男 年齢:15 学年:1 成绩:78

男: 学生番号:4 性别:男 年齢:13 学年:1 成绩:84

女: 学生番号:6 性别:女 年齢:13 学年:3 成绩:44

女: 学生番号:10 性别:女 年齢:13 学年:3 成绩:48

女: 学生番号:5 性别:女 年齢:13 学年:1 成绩:59

女: 学生番号:1 性别:女 年齢:15 学年:2 成绩:79

女: 学生番号:2 性别:女 年齢:15 学年:2 成绩:98

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值