java學習小記

飛翔的燕子~發表於2020-10-31

設計並實現三個類:班級(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;
}

 

相關文章