Java 将对象指定给对象

Java 将对象指定给对象,java,Java,作为任务的一部分,我收到了以下文件: private static void addStudent(int id, String firstName, String lastName,int mathsMark1, int mathsMark2, int mathsMark3, int englishMark1, int englishMark2, int englishMark3) 解释如下: 创建一个新的Student对象和两个AsignmentMarks对象(用于数学和英语)。使

作为任务的一部分,我收到了以下文件:

private static void addStudent(int id, String firstName, String lastName,int 
mathsMark1, int mathsMark2, int mathsMark3, int englishMark1, int 
englishMark2, 
int englishMark3) 
解释如下:

创建一个新的Student对象和两个AsignmentMarks对象(用于数学和英语)。使用给定的参数指定这三个对象的值。记住将两个AssignmentMarks对象指定给Student对象。最后,将该学生添加到学生列表中

学生班级:

public class Student {

    private int id;
    private String firstName;
    private String lastName;
    public AssignmentMarks mathMarks;
    public AssignmentMarks englishMarks;

    public Student(int studentID, String firstName, String lastName, int 
    mathMark1, int mathMark2, int mathMark3, int englishMark1, int englishMark2, 
    int englishMark3) {

        id = studentID;
        this.firstName = firstName;
        this.lastName = lastName;

    }
}
作业分数类别:

public class AssignmentMarks {

    private String courseName;
    private int assignment1;
    private int assignment2;
    private int assignment3;

    public AssignmentMarks(String name, int mark1, int mark2, int mark3) {

        courseName = name;
        assignment1 = mark1;
        assignment2 = mark2;
        assignment3 = mark3;        
    }
}
学生对象将添加到列表中。我的问题是“有人知道我得到的解释中“记住将两个AssignmentMarks对象分配给Student对象”是什么意思吗


我理解的问题不在于如何做。

您必须创建两个
赋值标记
实例:

  • 一个用于
    englishMarks
    属性
  • 一个用于
    mathMarks
    属性
英国马克:

this.englishMarks = new  AssignmentMarks("english", 
                         englishMark1, englishMark2, englishMark3);

对于mathMarks,您也可以这样做。

这两个对象
AssignmentMarks mathMarks
AssignmentMarks englishMarks
未在构造函数中赋值,因此初始化为
null
。但是,由于它们被声明为
public
,因此可以通过创建的对象进行赋值。这将导致k像这样:

Student s = new Student(0, "Foo", "Bar", 1, 2, 3, 4, 5, 6);
//Note that the arguments int mathMark1, int mathMark2, 
//int mathMark3, int englishMark1, int englishMark2, int englishMark3 will be ignored

//s.mathMarks and s.englishMarks are null here
s.mathMarks = new AssignmentMarks("Math", 4, 5, 6);
//s.mathMarks is now initialized, s.englishMarks is not initialized.
s.englishMarks= new AssignmentMarks("English", 1, 2, 3);
//Both are initialized now.
public class Student {

    private int id;
    private String firstName;
    private String lastName;
    public AssignmentMarks mathMarks;
    public AssignmentMarks englishMarks;

    public Student(int studentID, String firstName, String lastName,
            int mathMark1, int mathMark2, int mathMark3,
            int englishMark1, int englishMark2, int englishMark3) {
        // assign the primitives and String attributes directly
        id = studentID;
        this.firstName = firstName;
        this.lastName = lastName;
        // assign the subject marks with newly created objects defined by parametrized constructor call
        mathMarks = new AssignmentMarks("maths", mathMark1, mathMark2, mathMark3);
        englishMarks = new AssignmentMarks("english", englishMark1, englishMark2, englishMark3);
    }
}
我希望这对你有帮助

创建新的学生对象

和两个AsignmentMarks对象(用于数学和英语)

记住将两个AssignmentMarks对象分配给学生 反对

最后,将该学生添加到学生列表中

//List students=new ArrayList();
学生。添加(学生);

似乎您希望或必须在此构造函数中直接处理给定给
学生的构造函数的参数。您可以在那里创建新的
赋值标记
,并将其分配给
学生的类属性。
没有那么多事情要做,只需在
学生
课堂上添加两行内容,如下所示:

Student s = new Student(0, "Foo", "Bar", 1, 2, 3, 4, 5, 6);
//Note that the arguments int mathMark1, int mathMark2, 
//int mathMark3, int englishMark1, int englishMark2, int englishMark3 will be ignored

//s.mathMarks and s.englishMarks are null here
s.mathMarks = new AssignmentMarks("Math", 4, 5, 6);
//s.mathMarks is now initialized, s.englishMarks is not initialized.
s.englishMarks= new AssignmentMarks("English", 1, 2, 3);
//Both are initialized now.
public class Student {

    private int id;
    private String firstName;
    private String lastName;
    public AssignmentMarks mathMarks;
    public AssignmentMarks englishMarks;

    public Student(int studentID, String firstName, String lastName,
            int mathMark1, int mathMark2, int mathMark3,
            int englishMark1, int englishMark2, int englishMark3) {
        // assign the primitives and String attributes directly
        id = studentID;
        this.firstName = firstName;
        this.lastName = lastName;
        // assign the subject marks with newly created objects defined by parametrized constructor call
        mathMarks = new AssignmentMarks("maths", mathMark1, mathMark2, mathMark3);
        englishMarks = new AssignmentMarks("english", englishMark1, englishMark2, englishMark3);
    }
}

这意味着你应该“记住将两个AssignmentMarks对象分配给Student对象”你认为这是什么意思?“我理解这个问题,但不知道怎么做。”然后向你的老师寻求更多帮助。我们不会为你写这篇文章——反正这对你来说不是最好的。关于堆栈溢出的问题必须具体。说“我不知道怎么做我的作业“这并不具体。就我所见,这项任务已经分解为可管理的步骤。你只需要一个接一个地看一遍。我就在这里的开头。我正在尽我最大的努力。就像我说的,我理解这个句子,但是如何将assessmentmarks对象分配给Student对象,而不将assessmentmarks作为Student构造函数的一部分?我整天都在努力从我的导师那里获得信息和更好的解释。材料含糊不清,尚未涵盖。他不会帮助我的。我在远距离学习,否则我会去和他谈谈。如果我不能在这里得到帮助或从我的导师那里得到帮助,我有点迷路了……一些帮助?那是行不通的@艾丽西:为什么不呢?你能解释一下吗?它不起作用,因为:mark1、mark2和mark3不存在,而且你没有在构造函数调用中编写参数类型。@Aliceoua最重要的一点是,我已经更正了答案。老实说,Oleg我可以吻你!我所需要的只是学生;student.englishMarks=英语标记;我什么都有。我意识到,对于任何阅读本文的人来说,这似乎很简单,但如果你不知道,没有人会解释你是如何自发地达到目的的?
// List<Student> students = new ArrayList<>();
students.add(student);
public class Student {

    private int id;
    private String firstName;
    private String lastName;
    public AssignmentMarks mathMarks;
    public AssignmentMarks englishMarks;

    public Student(int studentID, String firstName, String lastName,
            int mathMark1, int mathMark2, int mathMark3,
            int englishMark1, int englishMark2, int englishMark3) {
        // assign the primitives and String attributes directly
        id = studentID;
        this.firstName = firstName;
        this.lastName = lastName;
        // assign the subject marks with newly created objects defined by parametrized constructor call
        mathMarks = new AssignmentMarks("maths", mathMark1, mathMark2, mathMark3);
        englishMarks = new AssignmentMarks("english", englishMark1, englishMark2, englishMark3);
    }
}