OP hỏi làm thế nào để giải quyết vấn đề này mà không có vòng lặp! Đối với một số lý do nó là thời trang những ngày này để tránh vòng. Tại sao điều này? Có thể có một nhận thức rằng việc sử dụng map
, reduce
, filter
và bạn bè cũng như các phương pháp như each
ẩn các vòng lặp và cắt giảm phân đoạn chương trình và thật tuyệt. Cũng vậy với các đường dẫn Unix thực sự ngọt ngào. Hoặc mã jQuery. Mọi thứ trông tuyệt vời không có vòng lặp.
Nhưng Java có phương pháp map
không? Không thực sự, nhưng chúng ta có thể xác định một với giao diện Function
với phương thức eval
hoặc exec
. Nó không phải là quá khó và sẽ là một bài tập tốt. Nó có thể tốn kém và không được sử dụng trong thực tế.
Cách khác để thực hiện việc này mà không cần lặp lại là sử dụng tính năng đệ quy đuôi. Có, nó là loại ngớ ngẩn và không ai sẽ sử dụng nó trong thực tế, hoặc, nhưng nó cho thấy, có thể, rằng vòng là tốt trong trường hợp này.Tuy nhiên, chỉ cần để hiển thị "thêm một vòng lặp miễn phí ví dụ" và để vui chơi, ở đây là:
import java.util.Arrays;
public class FillExample {
private static void fillRowsWithZeros(double[][] a, int rows, int cols) {
if (rows >= 0) {
double[] row = new double[cols];
Arrays.fill(row, 0.0);
a[rows] = row;
fillRowsWithZeros(a, rows - 1, cols);
}
}
public static void main(String[] args) {
double[][] arr = new double[20][4];
fillRowsWithZeros(arr, arr.length - 1, arr[0].length);
System.out.println(Arrays.deepToString(arr));
}
}
Nó không phải là đẹp, nhưng trong câu trả lời cho câu hỏi của OP, không có rõ ràng vòng.
Nguồn
2011-08-19 07:40:55
nhưng tại sao không sử dụng một vòng lặp? –
@Caroline: Nếu bạn đang cố gắng khởi tạo mảng 2d bằng 0, u không cần làm như vậy vì nó đã được khởi tạo với 0 khi bạn cấp phát mảng và bạn không thể khởi tạo bất kỳ mảng nào mà không sử dụng vòng lặp.Bạn chỉ có thể ẩn lặp lại trong một hàm giống như Arrays.fill. – Emil
Xin chào, các bạn không phóng đại nó ngay bây giờ. Tất cả những gì anh ta muốn là một số phương thức trong Java API để khởi tạo các mảng đa chiều tới một số giá trị mặc định trong một bước duy nhất. Đó là những gì anh muốn nói mà không có một vòng lặp. –