Как назначить объект из одного класса в другой класс и как вычислить double и int внутри ArrayList? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть задание, но у меня проблемы с выполнением какой-то части. Спасибо, если кто-нибудь может дать мне руку.

Краткое задание: 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());



    }


}

1-я проблема. У меня есть предметный класс и класс учителя. Учитель сможет преподавать максимум 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());
    }


}

Класс учителя: 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());
    }
}

2-я проблема. Учитель будет либо неполный, либо полный рабочий день. У учителя, работающего неполный рабочий день, будет максимальный рабочий час, за который они могут работать, и почасовая ставка, за которую они будут платить, поэтому итоговая зарплата учителя, работающего неполный рабочий день, будет умножена на «максимальные часы», умноженные на «почасовую ставку». Я храню «почасовую ставку» и «максимальное количество рабочих часов» в 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>());
    }
}

3-й вопрос. У меня есть адресный класс, который должен быть частью класса Учитель. Я не могу связать адресный класс с классом учителя.

Адресный класс: 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 Ответ

0 голосов
/ 01 мая 2020

Вопрос 1)

  • Поместите ArrayLists "teacherDetailsList" и "subjectList" в основной метод, а не в конструкторы. Добавьте учителей и предметы в основных методах, а не в конструкторах.
  • Добавьте новый ArrayList с именем "mySubjects" в качестве поля для класса учителя
  • Добавьте следующие 2 метода в класс учителя:
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);
}
  • Добавьте следующие методы и поля в класс ученика
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)

  • создайте новый двойное поле, параметр конструктора (для каждого конструктора в классе), метод-мутатор и мутатор-аксессор с именем maxHour в классе Subject
  • добавляют двойное поле в класс учителя с именем salary. Если учитель работает неполный рабочий день, установите в конструкторе значение 0.
  • добавьте этот метод в класс учителя:
public double getSalary(){
    if(salary!=0) return salary;
    double s=0;
    for(Subject i: mySubjects) s+=i.getFee()*i.getMaxHours();
    return s;
}
  • Вы, честно говоря, больше не нуждаетесь в PartTimeSalary класс сейчас.

Вопрос 3

  • создать новое поле адреса, параметр конструктора (для каждого конструктора в классе), метод мутатора и мутатор доступа с именем myAddress в классе Teacher
  • Не связывайтесь с ArrayList в вашем классе адресов
...