【问题标题】:How to initialize object variable in another object constructor (more details)?如何在另一个对象构造函数中初始化对象变量(更多细节)?
【发布时间】:2020-07-29 17:02:36
【问题描述】:

我还是个初学者,所以放过我吧。

我有 5 节课,但我的问题只需要 2 节课。这是我作业中的一个问题,所以不需要太特别。我的任务是制作一个 java 终端系统来存储和显示讲师(兼职和全职)、讲师地址和课程信息。

我的代码将检查是否有要显示的兼职讲师(这包括地址对象,因为它是讲师信息的一部分)。如果没有,它将提示用户输入兼职讲师的详细信息。输入兼职详细信息时,我不确定如何在不重新创建对象的情况下输入地址。 这是我的代码

这是兼职课程

public class PartTime extends Lecturer{
    private double hourlyRate;
    private int hoursWorked;
    //classR = class resposible
    private ClassInfo classR;
    
    PartTime(){
        classR = new ClassInfo();
    }
    PartTime(String staffNo, String name, int contactNo, int noClasses, Address add, double hourlyRate, int hoursWorked, ClassInfo classR){
        super(staffNo, name, contactNo, noClasses, add);
        this.hourlyRate = hourlyRate;
        this.hoursWorked = hoursWorked;
        this.classR = classR;
    }

    public double getHourlyRate(){
        return this.hourlyRate;
    }
    public int getHoursWorked(){
        return this.hoursWorked;
    }
    public void setHourlyRate(double newHourlyRate){
        this.hourlyRate = newHourlyRate;
    }
    public void setHoursWorked(int newHoursWorked){
        this.hoursWorked = newHoursWorked;
    }
    
    public void displayClassR(){
        System.out.println("Class No           : "+ classR.getClassNo());
        System.out.println("Subject Name       : "+ classR.getSubjectName());
        System.out.println("Number Of Students : "+ classR.getNoStudents());
        System.out.println("Start Date         : "+ classR.getStartDate());
        System.out.println("End Date           : "+ classR.getEndDate());
    }
}

这是讲师课

public class Lecturer{

    private String staffNo, name;
    private int contactNo, noClasses;
    private final Address add;

    Lecturer(){
        add = new Address();
    }
    Lecturer(String staffNo, String name, int contactNo, int noClasses, Address add){
        this.staffNo = staffNo;
        this.name = name;
        this.contactNo = contactNo;
        this.noClasses = noClasses;
        this.add = add;
    }

    public String getStaffNo(){
        return this.staffNo;
    }
    public String getName(){
        return this.name;
    }
    public int getContactNo(){
        return this.contactNo;
    }
    public int getNoClasses(){
        return this.noClasses;
    }
    public void displayAdd(){
        System.out.println("Unit Number : "+ add.getUnitNo());
        System.out.println("Street Name : "+ add.getStreetName());
        System.out.println("City        : "+ add.getCity());
        System.out.println("Postcode    : "+ add.getPostcode());
    }
    public void setStaffNo(String newStaffNo){
        this.staffNo = newStaffNo;
    }
    public void setName(String newName){
        this.name = newName;
    }
    public void setContactNo(int newContactNo){
        this.contactNo = newContactNo;
    }
    public void setNoClasses(int newNoClasses){
        this.noClasses = newNoClasses;
    }
    public void setAdd(String newUnitNo, String newStreetName, String newCity, int newPostcode){
        add.setUnitNo(newUnitNo);
        add.setStreetName(newStreetName);
        add.setCity(newCity);
        add.setPostcode(newPostcode);
    }

}

你可以忽略菜单部分

import java.io.*;
class Main{
    static Scanner scan = new Scanner(System.in);
    static Address add = new Address();
    static ClassInfo classI = new ClassInfo();
    static FullTime ft = new FullTime();
    static PartTime pt = new PartTime();

    static String staffNo, name, classNo, subjectName, startDate, endDate, unitNo, streetName, city;
    static int contactNo, noClasses, hoursWorked, noStudents, postcode, select;
    static double annualSalary, hourlyRate;
    public static void main(String[] args){

        //menu looping
        do{
            System.out.println("=======================");
            System.out.println("|      Main Menu      |");
            System.out.println("|   Select an option  |");
            System.out.println("|    1. Lecturer      |");
            System.out.println("|    2. Class Info    |");
            System.out.println("|    3. File Actions  |");
            System.out.println("|    0. Exit          |");
            System.out.println("=======================");
         
            select = scan.nextInt();
            switch(select){
                case 1:
                    lecturerMenu();
                    break;
                case 2:
                    classInfoMenu();
                    break;
                case 3:
                    fileMenu();
                case 0:
                    System.out.println("Exiting...");
                    System.exit(0);
                    break;
                default:
                    System.out.println("Error please select again");
            }
        }while(select !=0);
        
}

最终它将进入用户添加兼职讲师数据的部分。设置不完整,因为我不知道如何做地址部分

public static void newPartTime(){
        
        System.out.println("Enter Part Time Lecturer Details");
        System.out.print("Enter Staff Number: ");
        scan.nextLine();
        staffNo = scan.nextLine();
        System.out.print("Enter Name: ");
        name = scan.nextLine();
        System.out.print("Enter Contact Number: ");
        contactNo = scan.nextInt();
        System.out.print("Enter Hourly Rate: ");
        hourlyRate = scan.nextDouble();
        System.out.print("Enter Hours Worked: ");
        hoursWorked = scan.nextInt();
        System.out.println("Enter Address");
        System.out.print("Enter Unit Number: ");
        scan.nextLine();
        unitNo = scan.nextLine();
        System.out.print("Enter Street Name: ");
        streetName = scan.nextLine();
        System.out.print("Enter City: ");
        city = scan.nextLine();
        System.out.print("Enter Postcode: ");
        postcode = scan.nextInt();
        scan.nextLine();

        if(classI == null){
            System.out.println("There is no class available. Please add a new class");
            newClassInfo();
        }else{
            pt.setStaffNo(staffNo);
            pt.setName(name);
            pt.setContactNo(contactNo);
            pt.setNoClasses(noClasses);
            pt.set

        }
        }

    }

通常我会为我的声明这样做:

static FullTime ft = new FullTime(var1, var1 ,var3, address);

我可以重新创建对象还是应该只添加一个方法来设置地址?

【问题讨论】:

  • 在您的代码之后,您应该创建您的 Address 对象并将其传递给构造函数,因为您在 Lecture 类中的引用 Address 变量是最终的。

标签: java oop object constructor


【解决方案1】:

您可以创建地址类的对象并为其设置值,然后将该对象设置为您的兼职对象。

【讨论】:

  • 这是否意味着我使用填充值创建对象(地址)?如果是这样,我希望仍然有一个检查器(如果为 null),以确保当仍然没有用户输入数据时有人尝试显示时显示“无地址。请输入地址”
  • 如果用户不输入与地址相关的数据,则设置为空。
猜你喜欢
  • 2016-01-08
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2013-01-12
  • 2021-11-06
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多