2010-04-14 27 views
7

Về cơ bản, tôi đang cố gắng này, nhưng điều này chỉ lá mảng đầy zeros. Tôi biết cách điền thông tin vào vòng lặp for bình thường nhưLàm thế nào để lấp đầy mảng hai chiều bằng cách sử dụng vòng lặp nâng cao java?

for (int i = 0; i < array.length; i++) 

nhưng tại sao biến thể của tôi không hoạt động? Bất kỳ trợ giúp sẽ được đánh giá cao.

char[][] array = new char[x][y]; 
for (char[] row : array) 
    for (char element : row) 
     element = '~'; 

Trả lời

7

Từ Sun Java Docs:

Vì vậy, khi bạn nên sử dụng for-each vòng lặp?

Bất cứ lúc nào bạn có thể. Nó thực sự làm đẹp mã của bạn. Thật không may, bạn không thể sử dụng ở mọi nơi. Xem xét, ví dụ, phương pháp expurgate. Chương trình cần quyền truy cập vào trình vòng lặp để loại bỏ phần tử hiện tại. Vòng lặp for-each ẩn biến lặp, do đó bạn không thể gọi remove. Do đó, vòng lặp for-each không thể sử dụng để lọc. Tương tự, nó không thể sử dụng cho các vòng mà bạn cần thay thế các phần tử trong danh sách hoặc mảng khi bạn đi qua nó.

+0

Vì vậy, với trình lặp nó sẽ hoạt động? Cảm ơn bạn đã trả lời. – Shark

+1

@Shark: mảng không cung cấp một trình lặp (trừ khi bạn bọc chúng bằng cách sử dụng 'Arrays.asList()'), nhưng một trường học cũ bình thường cho vòng lặp hoạt động tốt. –

4

Điều này là do element char không phải là một con trỏ đến vị trí bộ nhớ bên trong mảng, nó là một bản sao của nhân vật, vì vậy thay đổi nó sẽ chỉ thay đổi bản sao. Vì vậy, bạn chỉ có thể sử dụng biểu mẫu này khi đề cập đến mảng và đối tượng (không phải loại đơn giản).

0

Bài tập chỉ làm thay đổi biến cục bộ element.

13

Thirler đã giải thích lý do tại sao điều này không hiệu quả. Tuy nhiên, bạn có thể sử dụng Arrays.fill để giúp bạn khởi tạo các mảng:

char[][] array = new char[10][10]; 
    for (char[] row : array) 
     Arrays.fill(row, '~'); 
+0

Cảm ơn bạn đã gợi ý :) – Shark

+0

Cảm ơn bạn đã gợi ý – SHiRKiT

Các vấn đề liên quan