java学习小记

设计并实现三个类:班级(Class)、学生(Student)、课程(Course)。然后计算班上每个同学的平均成绩。

要求:

班级类的私有属性包含班级名称、学生人数以及学生列表(用对象数组表示)。班级类的方法包括:  构造函数Class(int num,String name) //num学生人数,name班级名称

 void addStudent (Object student) //往班级中添加学生。Student学生对象

 int GetStudentNum() //返回班级人数

 Object GetStudent(int index) //返回对应下标的学生对象

 重写toString()方法来将班级有关信息转换成字符串.


学生类的私有属性包含学生的学号、姓名、所选课程数量、所选课程(用对象数组表示)。学生类的方法包括:

 构造函数Student(int id, String name, int nCourse) //id学号,name学生姓名,nCourse所学课程数

 void addCourse(Object course) 往学生类中添加课程对象

 int GetCourseNum() 返回所学课程数

 Object GetCourse(int index) 返回对应下标的课程对象

 int calculateAvgGrade() 计算该每个学生的平均成绩(取整)

 重写toString()方法来将学生有关信息转换成字符串。``


课程类包含私有属性课程编号、课程名称、学分、是否缓考以及成绩(成绩要求在0到100分之间)。课程类方法包括:

 构造函数public Course(int id,String name,int credit) 分别为课程编号、课程名称、学分

 void sethk(boolean hk) hk=true代表缓考

 boolean gethk() 返回是否学生缓考

 void setcj(int cj) 设置成绩

 int getcj() 返回成绩

 int getCredit() 返回该课程的学分

 重写toString()方法来将课程有关信息转换成字符串。


编写一个测试类来测试这三个类的使用。往班级中创建多个学生,学生可以选修多门课程。计算班级中每个同学的平均成绩。 注意:如果某生某课程缓考,则该门课成绩不能计入平均成绩内。此外,类中不可出现公用属性,必须使用封装。

package step2;
//在这些Class类
import java.util.Arrays;

class Class {
    private String name;
    private int num;
    private Student[] students;
    private int cont=0;
    public Class(int num,String name) {
        this.name = name;
        this.num = num;
        this.students = new Student[num];
    }
    public void addStudent (Object  student){
            this.students[cont] = (Student)student;
            cont++;
    
    }
    public int GetStudentNum(){
        return num;
    }
    public Object GetStudent(int index){
        return students[index];
    }

    @Override
    public String toString() {
        return "Class{" +"name='" + name + '\'' +", num=" + num +", students=" + Arrays.toString(students) +'}';       
    }
}

class Course {
    private int id;
    private String name;
    private int credit;
    private boolean hk;
    private int cj;

    public Course(int id, String name, int credit) {
        this.id = id;
        this.name = name;
        this.credit = credit;
    }

    /*public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

   /* public void setName(String name) {
        this.name = name;
    }*/

    public int getCredit() {
        return credit;
    }

   /* public void setCredit(int credit) {
        this.credit = credit;
    }*/

    public boolean gethk() {
        return hk;
    }

    public void sethk(boolean hk) {
        this.hk = hk;
    }

    public int getcj() {
        return cj;
    }

   public void setcj(int cj) {
        this.cj = cj;
    }
    
}

class Student {
    private int id;
    private String name;
    private int nCourse;
    private Course[] courses;
    private int cont;
    public Student(int id, String name, int nCourse) {
        this.id = id;
        this.name = name;
        this.nCourse = nCourse;
        this.courses = new Course[nCourse];
    }
    //添加
    public void addCourse(Object course){
        if(course instanceof Course){
            this.courses[cont] = (Course)course;
            cont++;
        }else {
            return;
        }
    }
    public int GetCourseNum(){
        return nCourse;
    }
    public Object GetCourse(int index){
        return courses[index];
    }
    public int calculateAvgGrade(){
        int sum=0;
        int contCourse=0;
        for (Course course:courses) {
            if(course.gethk()){
                continue;
            }else {
                sum+=course.getcj();
                contCourse++;
            }
        }
        return sum/contCourse;
    }

    @Override
    public String toString() {
        return "Student{" +"id=" + id +", name='" + name + '\'' +", nCourse=" + nCourse +", courses=" + Arrays.toString(courses) +'}';
                       
                
    }
}

知识点小记:

1.关键字 instanceof

instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

2.java.util.ArrayList,ArrayList类是一个用数组实现的集合,支持随机访问,元素有序且可以重复

ArrayList类详细介绍可参考博客https://www.cnblogs.com/ysocean/p/8622264.html

附带C语言算法题:

 

Kagura_Mea非常喜欢204这个数字,因为'a' + 'k' = ‘204’。

现在她有一个长度为n的序列,其中只含有2,0,4这三种数字。

设ai为序列中第i个数,你需要重新排列这个数列,使得从第一项开始,每一项与前项的差的平方的和最大。

注意:我们默认a0 = 0。

输入

第一行输入一个整数n。(1<=n<=1000000)

接下来一行n个整数,第i个数表示ai。ai为0,2,4中的一个。

输出

输出一个整数,表示最大的和。

 

#include <stdio.h>
#include <algorithm>
using namespace std;
int a[100000],b[100000];
int main(){
	int m,n,k,p,q,sum=0;
	scanf("%d",&m);
	for(int i=1;i<=m;i++){
		scanf("%d",&a[i]);
	}a[0]=0;
	while(1){
		sort(a+1,a+m+1);
		
		p=0;k=0;
		for(int i=0;i<=m;i++){
			if(i%2!=0){
				b[i]=a[m-k];
				k++;
			}else {
			b[i]=a[p];	
			p++;
			}
		}
		for(int j=0;j<m;j++){
			sum+=(b[j+1]-b[j])*(b[j+1]-b[j]);
		}
		break;
	}
	printf("%d",sum);
	
	return 0;
}

 

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页