30/09/2018, 18:16

Đâu là lỗi sai của mình trong đoạn code này?

Trên là Diagram của bài đó

 package tuan05;

public class Faculty {
	private String facultyID;
	private String lastName;
	private String firstName;
	private String office;
	public Faculty(String facultyID, String lastName, String firstName, String office) {
		super();
		this.facultyID = facultyID;
		this.lastName = lastName;
		this.firstName = firstName;
		this.office = office;
	}
	
	public Faculty(){
		this("0","0","0","0");
	}

	public String getFacultyID() {
		return facultyID;
	}

	public void setFacultyID(String facultyID) {
		this.facultyID = facultyID;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getOffice() {
		return office;
	}

	public void setOffice(String office) {
		this.office = office;
	}

	@Override
	public String toString() {
		return String.format("%10s
%10s
%10s
%10s
",facultyID,lastName,firstName,office);
	}
}

Class

package tuan05;

public class Section{
	private String sectionNbr;
	private String semester;
	private String room;
	private static Faculty teacher;
	public Section(String sectionNbr, String semester, String room,Faculty teacher) {
		super();
		this.sectionNbr = sectionNbr;
		this.semester = semester;
		this.room = room;
		Section.teacher = teacher;
	}

	public Section(){
		this("0","0","0",teacher);
	}


	public String getSectionNbr() {
		return sectionNbr;
	}

	public void setSectionNbr(String sectionNbr) {
		this.sectionNbr = sectionNbr;
	}

	public String getSemester() {
		return semester;
	}

	public void setSemester(String semester) {
		this.semester = semester;
	}

	public String getRoom() {
		return room;
	}

	public void setRoom(String room) {
		this.room = room;
	}

	@Override
	public String toString() {
		return "Mã học phần: " + sectionNbr + "
Học kỳ: " + semester + "
Phòng học: "
				+ room + "
Giảng viên: " + teacher.getLastName() + " " + teacher.getFirstName()
				+ "(Khoa: " + teacher.getOffice() + ")";
	}
}

Class

package tuan05;

public class Course {
	private String courseNbr;
	private String courseTitle;
	private int credits;
	private Section[] sections;
	private int i=0;
	
	public Course(){
		this("0","0",0);
	}

	public Course(String courseNbr, String courseTitle, int credits) {
		super();
		this.courseNbr = courseNbr;
		this.courseTitle = courseTitle;
		this.credits = credits;
		sections = new Section[5];
	}

	public String getCourseNbr() {
		return courseNbr;
	}

	public void setCourseNbr(String courseNbr) {
		this.courseNbr = courseNbr;
	}

	public String getCourseTitle() {
		return courseTitle;
	}

	public void setCourseTitle(String courseTitle) {
		this.courseTitle = courseTitle;
	}

	public int getCredits() {
		return credits;
	}

	public void setCredits(int credits) {
		this.credits = credits;
	}
	
	public void addSection(String SectionNbr, String semester, String room, Faculty listFa){
		Section st = new Section(SectionNbr,semester,room,listFa);
		sections[i]=st;
		i++;
	}
	
	public void displayAll(){
		for(Section sec : sections){
			if(sec==null)
				break;
			System.out.println(sec + "
");
		}
	}

	@Override
	public String toString() {
		return "Khóa học: [" + courseNbr + " - " + courseTitle + " (" + credits + "TC)]
" ;
	}
}

Class

package tuan05;

public class Driver {
	public static void main(String[] args) {
		Faculty f1 = new Faculty("11111","Lê Kim","Khánh","CNTT");
		Faculty f2 = new Faculty("22222","Nguyễn Thành","Danh","CNTT");
		Course cs = new Course("THVP","Tin học văn phòng",4);
		System.out.println(cs);
		cs.addSection("120151","I - 2015", "H5.02",f1);
		System.out.println("=========================================");
		cs.addSection("220151","II - 2015", "B4.01",f2);
		cs.displayAll();
	}
}

Mình có thử chuyển Faculty sang kiểu mảng nhưng mà chuyển xong thì tè le đủ kiểu lại còn chạy không được >_<

vũ xuân quân viết 20:31 ngày 30/09/2018

khúc bạn chuyển Faculty đâu ? Đưa code lên đây và đưa thông báo lỗi lên luôn.

Liêu Đức Mạnh viết 20:20 ngày 30/09/2018

Không có lỗi gì bạn. Chỉ là đáng ra ở phòng học H5.02 thì Giảng viên là tên “Lê Kim Khánh” chứ không phải “Nguyễn Thành Danh” còn code thì mình đưa ở trên hết rùi mà bạn.

vũ xuân quân viết 20:17 ngày 30/09/2018

private static Faculty teacher;

coi lại công dụng của “static” trong java.
Nhớ không lầm thì để static vào biến nào đó thì nó là biến toàn cục của class.
Nên khúc sau thay đổi biến teacher làm thay đổi luôn giá trị gán ban đầu.
Hình như diễn đàn mình có nói về từ khóa static này.
Bạn dùng công cụ tìm kiếm. Tìm với từ khóa static là ra.

Liêu Đức Mạnh viết 20:31 ngày 30/09/2018

Sau khi xóa Static thì chạy được nhưng mà chương trình lại báo lỗi.

vũ xuân quân viết 20:20 ngày 30/09/2018
public Section(){
	this("0","0","0",teacher);
}

do cái biến teacher, bạn không khai báo rõ ràng nên trình biên dịch không hiểu.
có thể đổi lại

public Section(){
   Faculty tempFaculty = new Faculty();
   this("0","0","0",tempFaculty);
}
Liêu Đức Mạnh viết 20:22 ngày 30/09/2018

đã thử nhưng không được bạn ơi

vũ xuân quân viết 20:32 ngày 30/09/2018

xin lỗi mình hướng dẫn sai.
2 object thì không thể dùng dấu = để gán giá trị cho nhau được.
Nên bạn cần viết 1 hàm để copy giá trị thuộc tính của lớp đó.

public Faculty copy() // ham nay trong class Faculty
{
    Faculty temp = new Faculty();
    // Initialize how you need to here, use the object this was called from if you'd like
    temp.facultyID = this.facultyID;
    temp.lastName = this.lastName;
    temp.firstName = this.firstName;
    temp.office = this.office;
    return temp;
}
    
public Section(String sectionNbr, String semester, String room,Faculty teacher) {
 super();
 this.sectionNbr = sectionNbr;
 this.semester = semester;
 this.room = room;
 Section.teacher = teacher.copy();
 }
Liêu Đức Mạnh viết 20:23 ngày 30/09/2018

Nếu dùng Section.teacher thì nó bắt đổi Faculty cho Static, mà đổi cho Static thì sẽ không chạy được theo yêu cầu đề bài @@

vũ xuân quân viết 20:17 ngày 30/09/2018

mình code sai chỗ đó

Section.teacher = teacher.copy();

Đổi lại

this.teacher = teacher.copy();
Bài liên quan
0