Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Thêm 1 nhân viên vào danh sách nhân viên trong Java lỗi ArrayIndexOutOfBoundsException?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    25

    Mặc định Thêm 1 nhân viên vào danh sách nhân viên trong Java lỗi ArrayIndexOutOfBoundsException?

    Mình có bài tập như thế này :
    Code:
    class NhanVien
    {
    	private String maNV,Hoten;
    	private double luong;
    	public NhanVien()
    	{
    		maNV=Hoten=null;
    	 	luong=0;
    	}
    	public void setmaNV(String x)
    	{
    		maNV=x;
    	}
    	public void setHoten(String x)
    	{
    		Hoten=x;
    	}
    	public void setLuong(double x)
    	{
    		luong=x;
    	}
    	public String getmaNV()
    	{
    		return maNV;
    	}
    	public String getHoten()
    	{
    		return Hoten;
    	}
    	public double getLuong()
    	{
    		return luong;
    	}
    	public String toString()
    	{
    		String a;
    		return a=maNV+" "+Hoten+" "+luong; 	
    	}
           
    
    }
    Code:
    class QuanLyNhanVien
    {
    	private NhanVien a[];
    	private int n;
            public void ADD(NhanVien x)
    	{
    		
    		for(int i=n+1;i>=n;i--)
    		{
    			a[i]=new NhanVien();
    			a[i]=x;
    			break;
    		}
    	}
    }
    Cô mình bảo là hãy viết phương thức thêm vào 1 nhân viên trong class QuanLyNhanVien , các phương thức get/set . Viết class Demo để thực thi chương trình trên , sử dụng lại phương thức thêm vào 1 nhân viên trong class QuanLyNhanVien để tạo ra 1 danh sách nhân viên cần quản lý .
    Đây là class Demo của mình :
    Code:
    class Demo{
    	public static void main (String[] args) {
    		int chon; String b,c; double d;
    		QLNV a=new QLNV();
    		Scanner x=new Scanner(System.in);	
    					NhanVien nv=new NhanVien();
    					System.out.print("Ma NV  : ");
    					b=x.nextLine();
    					System.out.print("Ho Ten : ");
    					c=x.nextLine();
    					System.out.print("Luong  : ");
    					d=x.nextDouble();
    					x.nextLine();
    					nv.setmaNV(b);
    					nv.setHoten(c);
    					nv.setLuong(d);
    					a.ADD(nv);
    	}
    }
    Khi mình chạy thì nó báo lỗi ArrayIndexOutOfBoundsException ( bị lọt mảng ) , do là n tăng lên 1 vượt qua khỏi giá trị n lúc đầu . Vì cái ý bài này là muốn sử dụng vòng do {..........}while với các lựa chọn nhập , xuất và số lượng nhập (thêm) không cố định , mình có thể thêm bao nhiêu cũng được . Mình biết vậy nhưng không biết khắc phục sao , mong mấy bạn giúp !!!!

  2. #2
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Để nhập dữ liệu thì tốt nhất là nhập vào 1 deque thay vì mảng.
    http://docs.oracle.com/javase/6/docs/api/java/util/Deque.html
    Có 3 loại deque, đọc trong đó rồi tùy tình huống mà chọn cái phù hợp.

  3. #3
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    dùng vector,list,arraylist thay cho mảng. tiện hơn nhiều

  4. #4
    Ngày gia nhập
    03 2012
    Bài viết
    6

    Hi ban,

    Mình đoán là bạn đang học CTDL và bà cô iu cầu bạn viêt 1 CTDL để lưu trữ danh sách sinh viên. Nếu đúng zay thì bạn có thể dùng 1 array (như bài của bạn) hoặc dữ liệu khác như linked list chẳng hạn. Array thì dễ cài đặt nhưng số phần tử cố định, linked list cài đặt ít...dễ hơn Array nhưng số phần tử ko cố định (Capacity).

    Mình ko rõ hàm ADD của bạn lắm, nếu ý bạn là bỏ sinh viên x vô cuối mảng thì bạn code sai rồi
    tham khảo cái này
    Code:
    class QuanLyNhanVien
    {
    	private NhanVien a[] = new NhanVien[100];
    	private int n = 0;
            public void ADD(NhanVien x)
    	{
                    if (n <= 100)
    		{
                          a[n] = x;
                          n++;
                    }
    
    	}
    }

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    Lỗi trên là do chưa khởi tạo mảng
    bạn phải khởi tạo mảng trước khi sử dụng
    JAVA Code:
    1. NhanVien[] a = new NhanVien[100];

    JAVA Code:
    1. for(int i=n+1;i>=n;i--)
    2.         {
    3.             a[i]=new NhanVien();
    4.             a[i]=x;
    5.             break;
    6.         }
    Đoạn này khó hiểu vậy???

    PS: Vote theo anh z, dùng vector, list, arraylist tiện hơn nhiều. ArrayList và Vector gần như giống nhau (ngoại trừ vấn đến Thread Safe). Nếu chưa biết thread là gì thì cứ ArrayList mà táng
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    25

    Mặc định Thêm 1 nhân viên vào danh sách nhân viên trong Java lỗi ArrayIndexOutOfBoundsException?

    Hàm thêm 1 nhân viên của mình bị sai rồi . Ý của bài này là lúc đầu khởi tạo danh sách rỗng , rồi sau đó mình sẽ dùng hàm thêm 1 nhân viên vào để từ đó cứ tạo ra danh sách . Mảng thì không giải quyết vấn đề này được vì mình luôn cần khởi tạo số lượng mảng trước , trước khi mà mình muốn thêm vào 1 phần tử nào đó . Vậy chỉ có thể dùng danh sách liên kết để khởi tạo cho cái danh sách nhân viên này thôi hả các bạn ???

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    Trích dẫn Nguyên bản được gửi bởi giacmo1612 Xem bài viết
    Hàm thêm 1 nhân viên của mình bị sai rồi . Ý của bài này là lúc đầu khởi tạo danh sách rỗng , rồi sau đó mình sẽ dùng hàm thêm 1 nhân viên vào để từ đó cứ tạo ra danh sách . Mảng thì không giải quyết vấn đề này được vì mình luôn cần khởi tạo số lượng mảng trước , trước khi mà mình muốn thêm vào 1 phần tử nào đó . Vậy chỉ có thể dùng danh sách liên kết để khởi tạo cho cái danh sách nhân viên này thôi hả các bạn ???
    Dùng ArrayList như sau
    JAVA Code:
    1. ArrayList<NhanView> danhSachNV = new ArrayList<NhanView>();
    2. danhSachNV.add(new NhanVien());
    3. NhanVien nv1 = danhSachNV.get(n);
    4. danhSachNV.remove(nv1);
    5. //... đọc thêm javadoc nhé
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

Các đề tài tương tự

  1. Lập trình C++ Gặp lỗi lặp vô hạn khi xuất danh sách sinh viên trong code của bài danh sách sinh viên
    Gửi bởi boysieuda trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-05-2013, 04:57 PM
  2. Hà Nội Công ty NEO, 1 thành viên VNPT tuyển Lập trình viên. sinh viên làm thêm
    Gửi bởi Cong ty NEO trong diễn đàn Tuyển dụng - Việc làm CNTT
    Trả lời: 0
    Bài viết cuối: 22-05-2012, 04:11 PM
  3. Thêm k sinh viên vào danh sách sinh viên
    Gửi bởi pnst_1811 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 8
    Bài viết cuối: 25-10-2011, 09:55 PM
  4. Chương trình quản lí sinh viên viết trong visual c++ 2010. Lỗi không chạy khi in danh sách sinh viên theo năm
    Gửi bởi hikaru1015 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 9
    Bài viết cuối: 03-06-2011, 09:31 AM
  5. cách thêm sinh viên trong Danh sách liên kết trên C
    Gửi bởi vanquyenhp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 26-12-2009, 10:55 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn