带有子类的 UML

UML with subclasses

public class Student {
    private String name;
    private long id;
    private String grade;
    private int[] test;
    private int NUM_TESTS;

    public Student(){
        name="Un";
        id=0;
        grade="Un";
        test=new int[0];
        NUM_TESTS=5;
    }

    public Student(String x, long z) {
        name=x;
        id=z;
    }

    public void setName(String n) {
        name=n;
    }
    public void setID(long i) {
        id=i;
    }
    public void setGrade(String g) {
        grade=g;
    }
    /*public void setTestScore(int t,int s) {
        test=t;
        test=s;
    }

    public int getTestScore(int) {
        return test;
    }*/
    public int getNumTests() {
        return NUM_TESTS;
    }
    public String getName() {
        return name;
    }
    public long getID() {
        return id;
    }
    public String getGrade() {
        return grade;
    }

    public String toString() {
        return getTestScore()+getNumTests()+getName()+getID()+getGrade();
    }
    /*public void calculateResult() {
        int sum=0;
        for (int t:test)sum+=t;
        double average= 1.0t*sum/5;*/

    }
}

这是我的代码,我已经将我遇到问题的地方分开了。我正在写一个包含本科生和研究生子类的学生子类。 Here is the UML 如果它不是变量之一,我不明白如何正确实施 testScore?没关系计算结果我会自己解决。我也不确定我的构造函数是否准确。所有学生都参加五次考试,这是一个常数

首先,Studentclass好像应该是abstract。因为每个学生都是 UnderGraduatePostGraduate.

其次,您应该 extend 来自 Student class 的 child class。

希望以下代码对您有所帮助:

abstract class Student {

    private String name;
    private long id;
    private String grade;
    private int[] test;
    private final int NUM_TESTS = 5;

    public Student(){
        name = "UN";
        id = 0;
        grade = "UN";
        test = new int[NUM_TESTS];
    }

    public Student(String name, long id){
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        //TODO: write your desire toString method
        return getNUM_TESTS()+getName()+getId()+getGrade();
    }

    abstract void claculateResult();

    public int getTestScore(int testNumber){
        if(testNumber >= NUM_TESTS)
        return 0;

        return test[testNumber];
    }

    public void setTestScore(int testNumber, int score){
        if(testNumber >= NUM_TESTS)
            return;

        test[testNumber] = score;
    }

    public String getName() {
        return name;
    }

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

    public long getId() {
        return id;
    }

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

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public int[] getTest() {
        return test;
    }

    public void setTest(int[] test) {
        this.test = test;
    }

    public int getNUM_TESTS() {
        return NUM_TESTS;
    }
}

UnderGraduate class 将是:

public class UnderGraduate extends Student{

    public UnderGraduate(){

    }

    public UnderGraduate(String name, long id){
        super();
    }

    @Override
    void claculateResult() {
        //TODO: DO whatever you want
    }
}

请记住 PostGraduate class 与 UnderGraduate 相同。

  • setTestScore(int t, int s)...我建议使用谨慎选择的名称(标识符)。例如,如果你只是将参数重命名为:setTestScore(int testNumber, int score) 你会更熟悉你应该输入什么。
  • test = new int[0];不是你想要的。你想要 test = new int[NUM_TESTS]
  • 尝试重新考虑方法setTestScore(int testNumber, int score) 第一个参数实际上是 test 数组中的索引,第二个参数是值。
  • 所以,你的方法应该是这样的:

    public void setTestScore(int testNumber, int score) {
        test[testNumber] = score;
    }
    

我只是为您提供了一些实施指南...