30/09/2018, 18:49

Cách xoá một phần tử của mảng vĩnh viễn trong java

public boolean delete(int tim_ma) {
    int i;
    for(i=0; i<dem; i++)
        if(a[i].getMaSV()==tim_ma) { //tìm vị trị của sinh viên trong mảng
            break;
        }
    if(i==dem) //không tìm thấy mã sinh viên cần xoá
        return false;
    for(int j=i; j<dem-1; j++) //cập nhật lại mảng
        a[j] = a[j+1];
    dem--;
    return true;
}

Cách này của em chỉ có tác dụng khi truy cập không hết mảng. Em muốn xoá vĩnh viễn thì phải làm sao nhỉ??

Mai Anh Dũng viết 21:00 ngày 30/09/2018

Em khai báo a như thế nào?

Interns viết 20:54 ngày 30/09/2018
 public class SinhVien2_Array {
    private SinhVien2[] a;
    private int dem=0;

	public SinhVien2_Array(int n) {
		super();
		a = new SinhVien2[n];
   }
    public boolean themSV(SinhVien2 sv){
	if(dem==a.length)
		return false;
	for(int i=0; i<dem; i++)
		if(a[i].equals(sv))
			return false;
	a[dem++] = sv;
	return true;
     }
     public boolean delete(int tim_ma) {
	int i;
	for(i=0; i<dem; i++)
	{
	        if(a[i].getMaSV()==tim_ma) //tìm vị trị của sinh viên trong mảng
		{
		     break;
		}
        }
	if(i==dem) //không tìm thấy mã sinh viên cần xoá
		return false;
	for(int j=i; j<dem-1; j++) //cập nhật lại mảng
	{
		a[j] = a[j+1];
        }
	dem--;
	return true;
     }
}
```
Đây là code của em
Huy Thọ viết 21:00 ngày 30/09/2018

Cái này có thể dùng vòng lặp khác được không nhỉ

Quân viết 20:51 ngày 30/09/2018

mảng array thì làm sao mà xóa được, chỉ có đánh lại chỉ mục thôi. Muốn sử dụng mảng động thì nghiên cứu các class implement từ interface Collection nhé gồm có
List: ArrayList, LinkedList, …

Vu Van Chung viết 20:54 ngày 30/09/2018

Chỉ có mảng động mới xóa được thôi, mình thì hay dùng ArrayList, nếu xóa phần tử nào thì chỉ cần gọi hàm remove là xong, mình không hiểu rõ lắm nhưng có cảm giác nó giống danh sách liên kết trong C++

Không tính đến code đúng sai. Chỉ viết lại code theo cách khác thôi nhé:

public boolean delete(int id) {
    for(int i = 0; i < dem; i++) {
        if(a[i].getMaSV() == id) {
            int newSize = dem - 1; 
            for(int j=i; j < newSize; j++) {
                a[j] = a[j+1];
            }
            dem--;
            return true;
        }
    }
    return false;
}
Nguyễn Việt Đức viết 21:00 ngày 30/09/2018

Nghĩ đơn giản một chút mọi thứ sẽ dễ dàng. Biết bài lâu rồi nhưng rep cho các bạn sau cần tìm

public static int[] remove(int[] a, int i) {
int[] b = new int[a.length - 1];
System.arraycopy(a, 0, b, 0, i);
System.arraycopy(a, i + 1, b, i, a.length - i - 1);
return b;
}

Bài liên quan
0