Java - Xóa phần tử có giá trị k trong mảng (k nhập từ bàn phím).

Viết chương trình thực hiện các công việc sau: Nhập một mảng có n phần tử nguyên từ bàn phím (n > 0). Sau đó nhập vào số nguyên k và xóa các phần tử trong mảng có giá trị bằng k.

Yêu cầu kỹ thuật: Chương trình phải kiểm tra n nhập vào: nếu n <= 0 thì cho nhập lại số phần tử cho đến khi thỏa mãn điều kiện.

Bài giải

-------------------- ######## --------------------

Bài giải
public static void main(String[] args) {
	int n, i, c;
	Scanner scanner = new Scanner(System.in);
		
	do {
		System.out.println("Nhập vào số phần tử của mảng: ");
		n = scanner.nextInt();
	} while (n <= 0);
		
	int A[] = new int[n];
		
	System.out.println("Nhập các phần tử cho mảng: ");
	for (i = 0; i < n; i++) {
		System.out.print("Nhập phần tử thứ " + i + ": ");
		A[i] = scanner.nextInt();
	}
		
	System.out.println("Nhập số nguyên k: ");
	int k = scanner.nextInt();
		
	// xóa phần tử k ra khỏi mảng
	// vòng lặp for sẽ khởi tạo c = i = 0
	// và duyệt i từ 0 đến n
	// nếu phần tử tại vị trí i khác với số nguyên k 
	// thì gán phần tử tại i cho phần tử tại k
	// sau đó tăng c lên 1
	for (c = i = 0; i < n; i++) {
		if (A[i] != k) {
			A[c] = A[i];
			c++;
		}
	}
		
	n = c;	// lúc này số phần tử trong mảng sẽ bằng c
		
	// hiển thị các phần tử trong mảng sau khi xóa k
	System.out.println("Mảng còn lại sau khi xóa phần tử " + k + " là: ");
	for (i = 0; i < n; i++) {
		System.out.print(A[i] + "\t");
	}
}

Giải thích hoạt động của chương trình trên:

Bước 1: Nhập vào số phần tử của mảng n = 5, các phần tử cho mảng A[0] = 1, A[1] = 2, A[2] = 2, A[3] = 3 và A[4] = 4 và số nguyên k cần xóa = 3.

Bước 2: Thực hiện vòng lặp for: Ban đầu khởi tạo c = i = 0. i = 0 < 5 nên thực hiện các lệnh trong thân vòng lặp, vì A[i] = 1 != 2 nên gán A[c] = A[i] = 1 và tăng c lên 1, lúc này c = 1.

Bước 3: Tăng i lên 1, i = 1 < 5 nên thực hiện các lệnh trong thân vòng lặp, vì A[i] = 2 = 2 nên bỏ qua không thực hiện lệnh trong thân vòng for.

Bước 4: Tăng i lên 1, i = 2 < 5 nên thực hiện các lệnh trong thân vòng lặp, vì A[i] = 2 = 2 nên bỏ qua không thực hiện lệnh trong thân vòng for.

Bước 5: Tăng i lên 1, i = 3 < 5 nên thực hiện các lệnh trong thân vòng lặp, vì A[i] = 3 != 2 nên gán A[c] = A[i] = 3 và tăng c lên 1, lúc này c = 2.

Bước 6: Tăng i lên 1, i = 4 < 5 nên thực hiện các lệnh trong thân vòng lặp, vì A[i] = 4 != 2 nên gán A[c] = A[i] = 4 và tăng c lên 1, lúc này c = 3.

Bước 7: Tăng i lên 1, i = 5 không thỏa mãn điều kiện lặp nên bỏ qua không thực hiện lệnh trong thân vòng for.

Bước 8: Gán n = c, lúc này số phần tử trong mảng = c = 3.

Bước 9: Hiển thị các phần tử còn lại trong mảng là: 1     2     2     4

Kết quả sau khi biên dịch chương trình:

Nguồn: freetuts.net