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ỉ??

1 Like

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

 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

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

1 Like

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, …

1 Like

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;
}
1 Like

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;
}

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