Dưới đây là cách bạn có thể triển khai phương thức xoayvongmang() với số lượng phần tử dịch chuyển k được nhập từ bàn phím:
import java.util.Scanner;
public void xoayvongmang() {
Scanner scanner = new Scanner(System.in);
// Nhập số lượng phần tử dịch chuyển từ bàn phím
System.out.print("Nhập số lượng phần tử dịch chuyển (k): ");
int k = scanner.nextInt();
System.out.println("Mảng ban đầu là: ");
for (int i = 0; i < mang.length; i++) {
System.out.println(mang[i]);
}
// Tạo một mảng phụ để lưu trữ các phần tử đã được dịch chuyển
int[] b = new int[mang.length];
// Dịch chuyển phần tử mảng ban đầu sang phải
for (int i = 0; i < mang.length; i++) {
b[(i + k) % mang.length] = mang[i];
}
// Dịch chuyển phần tử mảng ban đầu sang trái
for (int i = 0; i < mang.length; i++) {
b[(i - k + mang.length) % mang.length] = mang[i];
}
// Hiển thị mảng sau khi đã xoay vòng
System.out.println("Mảng sau khi xoay vòng là: ");
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
scanner.close();
}- Trong đoạn mã b[(i + k) % mang.length] = mang[i];, chúng ta sử dụng công thức (i + k) % mang.length để xác định vị trí mới của các phần tử trong mảng b sau khi dịch chuyển. Hãy hiểu cách hoạt động của nó như sau:
(i + k): Đây là vị trí mới mà chúng ta muốn đặt phần tửmang[i]trong mảngb.ilà vị trí hiện tại của phần tử trong mảngmang, vàklà số lượng phần tử mà chúng ta muốn dịch chuyển sang phải.% mang.length: Toán tử%(modulo) được sử dụng để giữ cho kết quả nằm trong phạm vi từ 0 đếnmang.length - 1. Nó chia phần tử(i + k)cho độ dài của mảngmangvà trả về phần dư.
(*)
(i - k + mang.length) % mang.length: Đầu tiên, chúng ta trừ đi k từ vị trí hiện tại i để tính toán vị trí mới của phần tử. Nếu k là 1 và i là 0 (phần tử đầu tiên), kết quả sẽ là -1, tức là vị trí cuối cùng của mảng. Tuy nhiên, chúng ta cần đảm bảo rằng kết quả nằm trong phạm vi từ 0 đến mang.length - 1, vì vậy chúng ta cộng thêm mang.length trước khi áp dụng phép % mang.length để lấy phần dư.
Không có nhận xét nào:
Đăng nhận xét