Các phương thức set không hoạt động

package ThucHanhJavaCoBan;

import java.util.Scanner;

public class TestNhanVien {
	public static void main(String[] args) {
		NhanVien [] nv = new NhanVien [3];
		System.out.println("Moi ban nhap thong tin nhan vien");
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < nv.length; i++) {
			String ten = sc.nextLine();
			String diaChi = sc.nextLine();
			int tuoi = sc.nextInt();
			
//			nv[i] = new NhanVien(ten,diaChi,tuoi);
			nv[i].setName(ten);
			nv[i].setAddress(diaChi);
			nv[i].setAge(tuoi);
			sc.nextLine();
		}
		for (NhanVien x : nv) {System.out.println(x.getName() + " " + x.getAddress() + " " + x.getAge());
		}
	}
}

mọi ng cho e hỏi chút là trong vòng lặp for ở trên e ko thể dùng các hàm setName, setAddress, setAge (các hàm set get đều chuẩn) để gán giá trị cho nv[i] được, khi e biên soạn ko hiện lỗi nhưng khi chạy thì chỉ nhập được ng đầu tiên là nó báo lỗi nullpointer j j đó. Nhưng nếu e dùng lệnh trong phần comment là “nv[i] = new NhanVien(ten,diaChi,tuoi);” thì lại được. Vậy là sao nhỉ?

cái này mình từng bị . Khai báo mảng đối tượng trong java giống như bạn khai báo mảng con trỏ trong C vậy, phải khai báo vùng nhớ cho từng đối tượng mới đùng đc

1 Like

Nếu bạn viết như thế này thì chương trình đâu có biết nv[i] của bạn là gì đâu vì giá trị lúc đó của nó là null mà. Vì vậy mà bạn phải khai báo phần tử trong mảng trước để hệ thống biết nv[i] là một NhanVien.


Nhưng như vậy thì lại phải set giá trị trước đúng không? Cách giải quyết vấn đề đó là sử dụng Constructor rỗng. Tức là bạn chỉ khai báo nó là 1 NhanVien thôi chứ chưa gán giá trị cho các properties .

Constructor rỗng sẽ có định dạng như sau:

NhanVien() {}

Thêm dòng đó vào class NhanVien của bạn. Sau đó chỉnh sửa đoạn code trên như sau:

nv[i] = new NhanVien(); // Khai báo nv[i] là một NhanVien
nv[i].setName(ten);
nv[i].setAddress(diaChi);
nv[i].setAge(tuoi);
2 Likes

thanks bac. e lam dc roi. hi`

Nếu cách của mình đúng thì bạn tick solution để mọi người thấy luôn cách giải quyết nhé :smile:

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