java - 如何将一个类中的对象分配给另一个类以及如何计算 ArrayList 中的 double 和 int?

标签 java inheritance arraylist composition

我有一项作业,但我在尝试完成其中的某些部分时遇到问题。如果有人可以帮助我,我将不胜感激。

作业简介:https://pastebin.com/3PiqvfTE

主要方法:https://pastebin.com/J2kFzB3B

import java.util.ArrayList;
import java.util.Scanner;

public class mainMethod {

    public static void main(String[] args) {

        //scanner
        Scanner scanner = new Scanner (System.in);


        //subject object
        Subject subject = new Subject (0,null,0);
        System.out.println("How many subject do you want to enter: ");
        int subjectNumber = scanner.nextInt();
        for (int j = 0; j < subjectNumber; j++) {

            //subject ID
            System.out.println("Please enter the subject ID: ");
            int subID = scanner.nextInt();

            //subject Name
            System.out.println("Please enter subject name: ");
            String subName = scanner.next();

            //subject fee
            System.out.println("Please enter subject fee: ");
            double subFee = scanner.nextDouble();

            //add subject
            subject.addSubject(subID, subName, subFee);
        }

        //display subject
        System.out.println(subject.getSubject());



        /*
        //loop for part time teacher
        System.out.println("Please enter how many part time teacher do you have: ");
        int PTcounter = scanner.nextInt();
        for (int i = 0; i < PTcounter; i++) {
        */





        Teacher teach = new Teacher (0,null,null);

        //teacher employee ID
        System.out.println ("Please enter the teacher employee ID: ");
        int tid = scanner.nextInt();

        //teacher name 
        System.out.println("Please enter the teacher name: ");
        String tname = scanner.next();

        //teacher gender
        System.out.println("Please enter the teacher gender: ");
        String tgender = scanner.next();

        //add teacher details
        teach.addTeacher(tid, tname, tgender);

        //display teacher details
        System.out.println(teach.getTeacher());





        //call address class
        Address address = new Address (0,null,null,0);

        //address house number
        System.out.println("Please enter house number: ");
        int addyNum = scanner.nextInt();

        //address street name
        System.out.println("Please enter street name: ");
        String StreetName = scanner.next();

        //address city
        System.out.println("Please enter city: ");
        String City = scanner.next();

        //address post code
        System.out.println("Please enter postcode: ");
        int Postcode = scanner.nextInt();

        //add address
        address.addAddress(addyNum, StreetName, City, Postcode);

        //display address
        System.out.println(address.getAddress());




        //call Part Time Salary class
        PartTimeSalary ptSalary = new PartTimeSalary(0,0);

        //max hours
        System.out.println("Please enter maximum work hours: ");
        int maxHours = scanner.nextInt();

        //hourly rate
        System.out.println("Please enter hourly rate: ");
        double hourlyRate = scanner.nextDouble();

        ptSalary.addPTSalary(maxHours, hourlyRate);

        System.out.println(ptSalary.getHourlyRate());

        //System.out.printf("Teacher details is %s, Subject details is %s, Address is %s", teach.toString(),subject.toString(),address.toString());



    }


}

第一个问题。我有一个学科类和一个教师类。教师最多可以教授 4 门科目。我已提示用户在输入教师详细信息之前输入科目详细信息,因此当用户输入教师详细信息时,他们只需使用 subjectID 即可将科目分配给教师。我在执行此操作时遇到问题。我的主题已经存储在 ArrayList 中,但如何将其与老师连接。最后程序会显示每位老师教授的科目。

主题类:https://pastebin.com/iBYFqYDN

import java.util.ArrayList;
import java.util.Arrays;

public class Subject {

    private int subjectID;
    private String subjectName;
    private double fee;
    private ArrayList <Subject> subjectList = new ArrayList <Subject>();

    public Subject(int subjectID, String subjectName, double fee) {
        this.subjectID = subjectID;
        this.subjectName = subjectName;
        this.fee = fee;
    }

    public int getSubjectID () {
        return subjectID;
    }

    public void setSubjectID (int subjectID) {
        this.subjectID = subjectID;
    }

    public String getSubjectName () {
        return subjectName;
    }

    public void setSubjectName (String subjectName) {
        this.subjectName = subjectName;
    }

    public double getFee () {
        return fee;
    }

    public void setFee (double fee) {
        this.fee = fee;
    }

    @Override
    public String toString() {
        return "[subjectID=" + subjectID + ", subjectName=" + subjectName + ", fee=" + fee + "]";
    }

    public void addSubject (int subjectID, String subjectName, double fee) {
        subjectList.add(new Subject(subjectID, subjectName, fee) );
    }

    public String getSubject () {
        return Arrays.toString(subjectList.toArray());
    }


}

教师类(class):https://pastebin.com/Np7xUry2

import java.util.ArrayList;
import java.util.Arrays;

public class Teacher {

    private int employeeID;
    private String name;
    private String gender;
    private ArrayList <Teacher> teacherDetailsList;

    public Teacher (int employeeID, String name, String gender) {
        this.employeeID = employeeID;
        this.name = name;
        this.gender = gender;
        this.teacherDetailsList = new ArrayList <Teacher>();
    }

    public int getEmployeeID () {
        return employeeID;
    }

    public void setEmployeeID (int employeeID) {
        this.employeeID = employeeID;
    }

    public String getName () {
        return name;
    }

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

    public String getGender () {
        return gender;
    }

    public void setGender (String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "[employeeID=" + employeeID + ", name=" + name + ", gender=" + gender + "]";
    }

    public void addTeacher (int employeeID, String name, String gender) {
        teacherDetailsList.add(new Teacher (employeeID,name,gender));
    }

    public String getTeacher () {
        return Arrays.toString(teacherDetailsList.toArray());
    }
}

第二个问题。老师可以是兼职老师,也可以是全职老师。兼职教师有最长工作时间和每小时工资,因此兼职教师的最终工资将是“最长工作时间”乘以“每小时工资”。我已将“每小时费率”和“最大工作时间”存储在 ArrayList 中,但如何调用它们来进行乘法,然后在最后显示。

兼职薪资等级:https://pastebin.com/iGKpu87Y

import java.util.ArrayList;

public class PartTimeSalary {

    private int maxHour;
    private double hourlyRate;
    private double hourlySalary;
    private ArrayList <PartTimeSalary> PTSalary = new ArrayList <PartTimeSalary>();
    private ArrayList <Double> finalHourlySalary = new ArrayList <Double>();

    public PartTimeSalary (int maxHour, double hourlyRate) {
        this.maxHour = maxHour;
        this.hourlyRate = hourlyRate;
    }

    public int getMaxHours () {
        return maxHour;
    }

    public void setMaxHour (int maxHour) {
        this.maxHour = maxHour;
    }

    public double getHourlyRate () {
        return hourlyRate;
    }

    public void setHourlyRate (double hourlyRate) {
        this.hourlyRate = hourlyRate;
    }

    public double getHourlySalary() {
        hourlySalary = hourlyRate*maxHour;
        return hourlySalary;
    }

    public void addPTSalary (int maxHour, double hourlyRate) {
        PTSalary.add(new PartTimeSalary(maxHour,hourlyRate));
    }


    public void FinalHourlySalary (double hourlySalary) {
        hourlySalary = hourlyRate * maxHour;
        finalHourlySalary.add(hourlySalary);
    }


    public ArrayList<Double> getFinalSalary () {
        return (new ArrayList <Double>());
    }
}

第三个问题。我有一个地址类,它应该是教师类的一部分。我似乎无法将地址类与教师类连接起来。

地址类别:https://pastebin.com/s2HN5p80

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Address {

    private int houseNum;
    private String streetName;
    private String city;
    private int postcode;
    private List <Address> address = new ArrayList <Address>();

    public Address (int houseNum, String streetName, String city, int postcode) {
        this.houseNum = houseNum;
        this.streetName = streetName;
        this.city = city;
        this.postcode = postcode;
    }

    public int getHouseNum() {
        return houseNum;
    }

    public void setHouseNum (int houseNum) {
        this.houseNum = houseNum;
    }

    public String getStreetName() {
        return streetName;
    }

    public void setStreetName (String streetName) {
        this.streetName = streetName;
    }

    public String getCity() {
        return city;
    }

    public void setCity (String city) {
        this.city = city;
    }

    public int getPostcode() {
        return postcode;
    }

    public void setPostcode (int postcode) {
        this.postcode = postcode;
    }


    public void addAddress (int houseNum, String streetName, String city, int postcode) {
        address.add(new Address (houseNum,streetName,city,postcode));
    }


    @Override
    public String toString() {
        return "[houseNum=" + houseNum + ", streetName=" + streetName + ", city=" + city + ", postcode="
                + postcode + "]";
    }

    public String getAddress () {
        return Arrays.toString(address.toArray());
    }


}

谢谢😃😊

最佳答案

问题 1)

  • 将“teacherDetailsList”和“subjectList”ArrayList 放入主方法中,而不是构造函数中。在主方法中添加教师和科目,而不是在构造函数中。
  • 添加一个名为“mySubjects”的新 ArrayList 作为教师类(class)的字段
  • 将以下 2 个方法添加到 Teacher 类中:
public Teacher (int employeeID, String name, String gender, ArrayList<Subject> s) {
    this.employeeID = employeeID;
    this.name = name;
    this.gender = gender;
    this.mySubjects=s;
}
public Teacher (int employeeID, String name, String gender, Subject s) {
    this.employeeID = employeeID;
    this.name = name;
    this.gender = gender;
    this.mySubjects.add(s);
}
public void addSubject(Subject s, boolean b){
    if(mySubjects.size()<4)mySubjects.add(s);
    else throw OutOfBoundsError;
}
public void removeSubject(Subject s, boolean b){
    mySubject.remove(s);
}
public void addSubject(Subject s){
    s.changeTeacher(s);
}
public void removeSubject(Subject s){
    mySubject.remove(s);
}
  • 将以下方法和字段添加到 Student 类
private Teacher teacher;
public Subject(int subjectID, String subjectName, double fee, Teacher t) {
    this.subjectID = subjectID;
    this.subjectName = subjectName;
    this.fee = fee;
    this.setTeacher(t);
}
public void setTeacher(Teacher t){
    try{
        t.addSubject(this);
        teacher=t;
    }
    catch(OutOfBoundsError e){
        System.out.println(t.getName()+" already has a full schedule.");
    }
}
public void changeTeacher(Teacher t){
    teacher.removeSubject(this);
    teacher = t;
    t.addSubject(this);
}

问题 2)

  • 在类Subject中创建一个新的 double 字段、构造函数参数(对于类中的每个构造函数)、变元方法和名为 maxHour 的访问器变元
  • 向教师类添加一个名为“工资”的双字段。如果教师是兼职教师,请在构造函数中将其设置为 0。
  • 将此方法添加到 Teacher 类中:
public double getSalary(){
    if(salary!=0) return salary;
    double s=0;
    for(Subject i: mySubjects) s+=i.getFee()*i.getMaxHours();
    return s;
}
  • 老实说,您现在不再需要 PartTimeSalary 类。

问题 3

  • 在 Teacher 类中创建一个新的 Address 字段、构造函数参数(对于类中的每个构造函数)、变元方法和名为 myAddress 的访问器变元
  • 不要为地址类中的 ArrayList 内容而烦恼

关于java - 如何将一个类中的对象分配给另一个类以及如何计算 ArrayList 中的 double 和 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61521743/

相关文章:

c++ - 找出 vptr 字段

Java 同步(ArrayList)还是 Vector?

java - 启动一个 Activity 会停止 Android 服务

java - Gradle多项目-在项目之间共享源代码

java - JPanel 上的 paintComponent,图像闪烁然后消失

Java 11 HttpClient - HttpClient 与并发 HttpRequest 的最佳比率是多少

PHP 单例和继承

java - Android开发中如何管理Activity继承

java - 打乱数组列表中的元素组

java - 解码 JAVA Web 服务中的嵌套或复杂数据元素