Hỏi về mảng trong code quản lý danh sách môn học

Em có

  1. 1 class monhoc.
  2. 1 class danhsachmonhoc bao gồm kiểu mảng chứa các môn học trong class monhoc.
  3. 1 class quản lý để chạy,phần nhập thì trong class quanly,phan xuat thi trong cac class kia.

Cho hỏi code em sai chỗ nào ạ. Em nhập 1 môn học và xuất 1 môn học bình thường nhưng sao em nhập vào danh sách môn học và khi em tạo đối tượng gọi đến phương thức xuất lại bị lỗi ạ…

Class monhoc {
	String tenmh;
	int sotc;
	float diemmh;
	public monhoc()
	{
		
	}
	public monhoc(String tenmh,int sotc,float diemmh)
	{
		this.tenmh = tenmh;
		this.sotc = sotc;
		this.diemmh = diemmh;
	}
	public String getTenmh() {
		return tenmh;
	}
	public void setTenmh(String tenmh) {
		this.tenmh = tenmh;
	}
	public int getSotc() {
		return sotc;
	}
	public void setSotc(int sotc) {
		this.sotc = sotc;
	}
	public float getDiemmh() {
		return diemmh;
	}
	public void setDiemmh(float diemmh) {
		this.diemmh = diemmh;
	}
	public void xuatmh()
	{
		System.out.println("ten mon hoc:" + getTenmh() + "\n" + "so tin chi:" + getSotc() + "\n" + "diem mon hoc:" + getDiemmh());
	}
}
Class danhsachmonhoc {
	int somonhoc;
	monhoc[] dsmh;
	public danhsachmonhoc()
	{
		somonhoc = 0;
	}
	public danhsachmonhoc(int somonhoc)
	{
		dsmh = new monhoc[somonhoc];
		somonhoc++;
	}
	
	public int getSomonhoc() {
		return somonhoc;
	}
	public void setSomonhoc(int somonhoc) {
		this.somonhoc = somonhoc;
	}
	public monhoc[] getDsmh() {
		return dsmh;
	}
	public void setDsmh(monhoc[] dsmh) {
		this.dsmh = dsmh;
	}
	public void xuatdsmh(monhoc[]  dsmh)
	{
		for(int i = 0;i<somonhoc;i++)
		{
			dsmh[i].xuatmh();//xuat danh sach mon hoc
			somonhoc++;
		}
	}
}
Class quanly {

	public static void main(String[] args) {
		String ten;
		int tc;
		float diem;
		int n;
		Scanner sc = new Scanner(System.in);
		System.out.println("Nhap vao so luong mon hoc:");
		n = sc.nextInt();
		monhoc[] dsmh = new monhoc[n];
		for(int i = 0;i<n;i++)
		{
				System.out.println("Nhap vao ten mon hoc:");
				ten = sc.next();
				System.out.println("Nhap vao so tin chi:");				//Nhap ds mon hoc
				tc = sc.nextInt();
				System.out.println("Nhap vao diem mon hoc:");
				diem = sc.nextFloat();
				dsmh[i] = new monhoc(ten,tc,diem);
		}
		danhsachmonhoc ds = new danhsachmonhoc();
		ds.xuatdsmh();
	}

}

:v chưa thấy lỗi nhưng mà mình nghĩ là mấy cái bài tập kiểu này có thể dùng ArrayList để quản lý tại vì kiểu Array trong Java chỉnh sửa , thêm xóa phần từ trong mảng rất là phức tạp.

1 Like

nhưng thầy em đang làm bằng mảng C nên em làm kiểu này vs lại mới học Java…:slight_smile:

mình chưa chạy trên IDE nhưng mà đoán là constructor tạo danhsachmonhoc của bạn nó không có một đối số để đưa vào cái mảng dsmh ở trên sau khi nhập xong, nên khi gọi phương thức thì nó trống lốc hết -> lỗi. bạn gọi thêm cái phương thức setDsmh nữa đi.

2 Likes

nhập được nhưng kết quả ko có

Mình sửa tạm vài chỗ cho chạy được thôi :confused: QuanLyMonHoc ( expiry date 1 day )

đâu bạn…

cái dòng xanh xanh QuanLyMonHoc là link đó :joy:

zô ko đc…

monhoc[] dsmh = new monhoc[n];
for(int i = 0;i<n;i++){
...
}
danhsachmonhoc ds = new danhsachmonhoc();

ds.setDsmh(dsmh) ?

Code của bạn gặp các vấn đề như sau:
1: bạn sử dụng lênh ds.xuatdsmh(); nhưng hàm xuatdsmh() cần 1 đối số là 1 mảng monhoc[] ;
Sửa lại: ds.xuatdsmh(dsmh);
2 : Bạn cần phải xét số lượng môn học cho đối tượng ds của lớp danhsachmonhoc:
Thêm: ds.setSomonhoc(n); trước lệnh ds.xuatdsmh();
-----> ds.setSomonhoc(n);
ds.xuatdsmh(dsmh);
3: trong hàm public void xuatdsmh(monhoc[] dsmh) của lớp danhsachmonhoc bỏ đoạn lệnh somonhoc++;
vì nếu bạn làm vậy mỗi vòng lặp biến somohoc sẽ tăng thêm 1 giá trị dẫn đến dsmh[i] sẽ truy xuất ngoài vị trí index của nó -> xóa somonhoc++;
Nếu vẫn gặp lỗi bạn có thể gửi project cho mình , mình có thể chỉ những điểm sai cho bạn.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?